谁能解释为什么以下代码无法编译(在 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: 'X X::A' 不是 'struct X' 的静态成员
jjj.cpp:10: 没有匹配函数来调用 'X::X()'
jjj.cpp:1:候选人是:X::X(const X&)
jjj.cpp:5: X::X(X::State)`
这是错误的代码还是编译器错误?
问题由 Neil+Konrad 解决。请参阅下面对尼尔回答的评论。
最佳答案
您忘记了定义中的变量名:
int main()
{
X my_x(X::A);
}
您的代码混淆了编译器,因为在语法上它无法将 this 与函数声明区分开来(返回 X
并将 X::A
作为参数传递)。当有疑问时,C++ 编译器总是会消除歧义以支持声明。
解决方案是在 X
周围引入多余的括号,因为编译器禁止在类型周围使用括号(与构造调用等相反):
(X(X::A));
关于编译器无法正确识别 C++ 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/681518/