作为返回类型的enum关键字的存在表示什么

时间:2015-04-28 22:45:36

标签: c++ visual-studio gcc enums

我目前正在使用庞大的代码库,我发现了这个声明

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

我的问题是上述陈述表明了什么?

2 个答案:

答案 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,这与标准规定的相反)。