【问题标题】:Porting an old C++ code from Solaris to Linux将旧的 C++ 代码从 Solaris 移植到 Linux
【发布时间】:2012-09-11 18:10:31
【问题描述】:

我只是想知道 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。

我应该包含其他库以便编译器,还是不再允许这种声明风格?

【问题讨论】:

    标签: c++ linux static solaris


    【解决方案1】:

    几乎从未被允许。第一个 C++ 标准不允许 C“隐式 int”规则; C99 也摆脱了这条规则。但是规则很简单,修复代码也很简单:只要在编译器抱怨的地方粘贴int。乏味,也许,但直截了当。

    【讨论】:

    • 此代码自 2005 年以来一直在使用,它似乎在 Solaris 和 AIX 上运行良好。在 Solaris 上,gcc 编译器是 gcc 版本 2.95.3 20010315(release),而在 AIX 上,它是 xlc_r 版本 5.0
    • 嗨@roymustang86,见gcc -ansi -pedantic -Wall。此外,gcc 4.6 被认为是 gcc 的“当前”版本。 4.7已经出来了。我相信两年前我在 AIX 5.x 上工作时,我们从 XlC++ 8 升级到了 9。
    • @roymustang86 - 这两个编译器都来自 2000 年代初期;第一个 C++ 标准是 1998 年,当时的编译器倾向于支持准标准代码以使过渡更容易。
    【解决方案2】:

    Default int 在 C++ 中不允许使用,您需要修复此代码并为变量设置显式 int 类型。

    【讨论】:

      最近更新 更多