当前位置:  开发笔记 > 编程语言 > 正文

编译器无法正确识别C++枚举

如何解决《编译器无法正确识别C++枚举》经验,为你挑选了2个好方法。

谁能解释为什么以下代码无法编译(在g ++(GCC)3.2.3 20030502(Red Hat Linux 3.2.3-49))?

struct X {
public:
   enum State { A, B, C };

   X(State s) {}
};

int main()
{
   X(X::A);
}

我收到的消息是:

jjj.cpp:在函数'int main()'中:
jjj.cpp:10:'XX :: A'不是'struct
X'jjj.cpp 的静态成员:10:没有用于调用'X的匹配函数: :X()'
jjj.cpp:1:候选者是:X :: X(const X&)
jjj.cpp:5:X :: X(X :: State)`

这是错误的代码还是编译器错误?

Neil + Konrad解决了问题.请参阅下面对Neil的回答的评论.



1> Konrad Rudol..:

您已经忘记了定义中的变量名称:

int main()
{
   X my_x(X::A);
}

您的代码会混淆编译器,因为它在语法上无法将其与函数声明(返回XX::A作为参数传递)区分开来.如果有疑问,C++编译器总是消除歧义,支持声明.

解决方案是引入冗余括号,X因为编译器禁止围绕类型括号(而不是构造调用等):

(X(X::A));



2> 小智..:
X(X::A);

被视为功能声明.如果您真的想要这个代码,请使用:

(X)(X::A);

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有