2012-09-11 68 views
3

我只是想知道,如果这种声明是允许在C++从移植Solaris上旧的C++代码到Linux

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上,我使用英特尔编译器11.1与命令ICPC -m32。

我是否应该包含其他库以便编译器,还是不允许这种类型的声明?

回答

8

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

+0

此代码自2005年以来一直使用,它似乎在Solaris和AIX上正常工作。在Solaris上,gcc编译器是gcc版本2.95.3 20010315(发行版),在AIX上它是xlc_r版本5.0 – roymustang86

+0

Hi @ roymustang86,遇到'gcc -ansi -pedantic -Wall'。另外,gcc 4.6被认为是gcc的'current'。 4.7已经不在了。两年前,当我从事AIX 5.x的工作时,我认为我们从XlC++ 8升级到了9。 – sehe

+1

@ roymustang86 - 这两个编译器都是从2000年初开始的;第一个C++标准是1998年,那些编译器在那些日子里倾向于支持预标准代码以使转换更容易。 –

1

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