将旧的C++代码从Solaris移植到Linux

3
我在想这种声明在C++中是否被允许。
  static nextUnassignedTableID = 0; 
  static nextUnassignedFieldID = TSFID_MINIMUM_USER_TSFID;

它在Solaris/AIX上没有任何抱怨。

但是,在Red Hat Enterprise Linux上,它抱怨:

 TSIDConverter.cpp(637): error #303: explicit type is missing ("int" assumed)
 static nextUnassignedTableID = 0; 

 TSIDConverter.cpp(638): error #303: explicit type is missing ("int" assumed)
 static nextUnassignedFieldID = TSFID_MINIMUM_USER_TSFID;

在Linux上,我正在使用Intel 11.1编译器,命令是icpc -m32。

为了让它编译,我是否应该包含其他库,或者这种声明方式不再被允许?

2个回答

8

这一被称为“隐式int”的规则在第一个C++标准中就已被禁止,C99也废除了该规则。虽然修复代码可能有些繁琐,但规则很简单:只需在编译器出错的地方添加 int 即可。


这段代码自2005年以来一直在Solaris和AIX上运行良好。在Solaris上,gcc编译器是gcc版本2.95.3 20010315(发布版),而在AIX上,它是xlc_r版本5.0。 - roymustang86
嗨,@roymustang86,请认识gcc-ansi-pedantic-Wall。此外,gcc 4.6 被认为是当前gcc的版本,4.7 已经发布。在我两年前工作于 AIX 5.x 的时候,我们从 XlC++ 8 升级到了 9 版本,如果我没记错的话。 - sehe
1
@roymustang86 - 这两个编译器都来自于2000年代初;第一个C++标准是1998年,那个时候的编译器往往支持预先制定的代码以使过渡更容易。 - Pete Becker

1

Default int 在 C++ 中是不允许的,你需要修复这段代码并为变量设置明确的 int 类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接