构造构造函数采用单个枚举参数的临时对象时出错
Error constructing temporary object whose constructor takes a single enum parameter
为什么下面的代码无效(至少使用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_VALUE
的 C
类型的对象。该错误抱怨您需要一个默认构造函数来初始化AN_E_VALUE
,但不存在默认构造函数(并且没有隐式声明)。
你试过这个吗?
int(a);
这基本上完成了同样的事情。也许看看这个问题。
相关文章:
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Arduino C++在构造函数中用参数声明对象数组
- 在不复制临时对象的情况下延长其生存期
- 为什么当我们有常量引用时创建临时对象?
- 程序如何'remember'临时对象?
- 返回对临时对象的引用
- 防止临时对象文件访问 MSVC 中的磁盘
- 编译错误:临时对象构造函数中缺少参数
- 为什么在按值返回时创建临时对象,而不是在按值传递给函数参数时创建临时对象
- 常量引用函数参数:是否可以禁止临时对象?
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- 为什么将临时对象作为参数传递需要 std::move?
- 重载函数时使用临时对象作为参数是一种好的做法吗
- 为什么非常量引用参数可以绑定到临时对象
- 构造构造函数采用单个枚举参数的临时对象时出错
- 以临时对象为参数的C++对象构造函数
- 将临时对象作为参数(C++)传递
- 在调用点参数处创建的临时对象的生命周期
- 在循环中用作"const &"函数参数的临时对象的编译器优化?
- 为什么我的构造函数将非常量引用作为参数允许与临时对象一起调用