枚举关键字作为返回类型的存在表示啥
Posted
技术标签:
【中文标题】枚举关键字作为返回类型的存在表示啥【英文标题】:what does the presence of an enum keyword as a return type indicate枚举关键字作为返回类型的存在表示什么 【发布时间】:2015-04-28 22:45:36 【问题描述】:我目前正在处理一个庞大的代码库,我遇到了这个声明
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
我的问题是上述陈述表明了什么?
【问题讨论】:
右键单击 OPTON_FILE_ENUM 并选择“转到定义” Visual Studio 在这种情况下没有帮助 【参考方案1】:Visual Studio 作为非标准扩展允许前向声明枚举(没有大小信息)。
所以您看到这里使用了该功能。它向前声明了一个名称为 OPTION_FILE_NUM
的枚举,并说函数返回它。
由于扩展是非标准的,您的其他编译器会抱怨。
在使用之前注入正确的 decl,或者如果 C++11 注入 enum OPTION_FILE_NUM:int;
如果我没记错的话,这就是 msvc 隐式执行的操作。 (有趣的是,msvc 不支持调整大小的 enums forward decl,而只支持 unsized,这与标准要求的相反)。
【讨论】:
【参考方案2】:就是这个意思:
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 并使用“跳转到定义”选项,您将能够找到罪魁祸首。
【讨论】:
只是想验证一下。看起来我可能不得不查看外部库并对其进行 grep。 Visual Studio 在这种情况下没有帮助 我可以肯定地告诉你,OPTION_FILE_NUM
不是标准的 C++ 对象或关键字。所以它必须在某个地方定义。
感谢您澄清这一点。 - 计时器清除后标记为答案以上是关于枚举关键字作为返回类型的存在表示啥的主要内容,如果未能解决你的问题,请参考以下文章