我目前正在使用庞大的代码库,我发现了这个声明
static enum OPTION_FILE_NUM FileOption(const char *target);
现在我不确定enum OPTION_FILE
返回类型在这里指示的是什么?我搜索了OPTION_FILE_NUM
类型的整个代码库,但我找不到任何代码在Visual Studio中编译好的代码。现在,当我在Mingw GCC中使用相同的代码时,我收到以下错误。
error: use of enum 'OPTION_FILE_NUM' without previous declaration
我的问题是上述陈述表明了什么?
答案 0 :(得分:1)
这恰恰意味着:
enum OPTION_FILE_NUM {elem1, elem2};
// function that returns OPTION_FILE_NUM
static enum OPTION_FILE_NUM FileOption(const char *target){}
int main(){}
您正在声明一个返回类型为enum OPTION_FILE_NUM
的函数。您应该在代码库中的某个位置或您包含的某个标头中定义该定义。尝试使用IDE并使用“跳转到定义”选项,您将能够找到罪魁祸首。
答案 1 :(得分:1)
Visual Studio作为非标准扩展允许向前声明枚举(没有大小信息)。
所以你看到这里使用了这个功能。它转发声明一个名为OPTION_FILE_NUM
的枚举,并说该函数返回它。
由于扩展名是非标准的,您的其他编译器会抱怨。
在使用它之前注入正确的decl,或者如果C ++ 11注入enum OPTION_FILE_NUM:int;
如果我没记错,这就是msvc隐式执行的操作。 (有趣的是,msvc不支持大小的enum forward decl,但只支持unsized,这与标准规定的相反)。