构造构造函数采用单个枚举参数的临时对象时出错

Error constructing temporary object whose constructor takes a single enum parameter

本文关键字:参数 临时对象 出错 枚举 单个 构造函数      更新时间:2023-10-16

为什么下面的代码无效(至少使用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。这是为什么呢?

C(AN_E_VALUE);

这将声明名为 AN_E_VALUEC 类型的对象。该错误抱怨您需要一个默认构造函数来初始化AN_E_VALUE,但不存在默认构造函数(并且没有隐式声明)。
你试过这个吗?

int(a);

这基本上完成了同样的事情。也许看看这个问题。