为什么以下代码无效(至少使用Visual Studio 2010或ideone)?
// E.h
enum E
{
AN_E_VALUE
};
// C.h
class C
{
public:
explicit C(E e) // explicit keyword is optional
{}
void Foo() {}
};
// main.cpp
int main(int argc, char** argv)
{
C c(AN_E_VALUE); // fine
C(AN_E_VALUE); // error
C(AN_E_VALUE).Foo(); // fine
return 0;
}
如果参数不是单个枚举类型,则可以正常工作。
编译器将错误调用理解为具有0个参数的调用,其中1是预期的。这是为什么?
答案 0 :(得分:3)
C(AN_E_VALUE);
这声明了一个名为C
的{{1}}类型的对象。该错误引发了一个事实,即您需要一个默认构造函数来初始化AN_E_VALUE
,但不存在默认构造函数(并且没有隐式声明)。
你有没有试过这个?:
AN_E_VALUE
这基本上完成了同样的事情。也许请查看this question。