成员对象构造函数和枚举
member object constructor and enum
为什么不能编译?
File.hpp
class CTest
{
public:
enum enumTest { EN_TEST };
//constructor:
CTest(enumTest f_en);
};
AnotherFile.hpp
#include "File.hpp"
class CAnotherTest
{
public:
CTest obj_Test(CTest::EN_TEST);
};
Visual Studio说:错误C2061:语法错误:标识符'EN_TEST'
armcc编译错误:#757:常量"CTest::EN_TEST"不是类型名
谢谢,Mirco
因为,
CTest obj_Test(CTest::EN_TEST);
作为一个名为obj_Test
的函数求值。现在它应该将argument作为类型,然而,CTest::EN_TEST
是一个值,而不是类型。
如果obj_Test
是一个对象,那么你必须在构造函数中将CTest::EN_TEST
传递给它:
class CAnotherTest
{
public:
CAnotherTest () : obj_Test(CTest::EN_TEST) {}
};
因为您的CAnotherTest
语法是错误的。也许你的意思是这样的?
class CAnotherTest
{
public:
// Constructor vvv Initialise member variable
CAnotherTest() : obj_Test(CTest::EN_TEST) {}
// Member variable
CTest obj_Test;
};
不能这样初始化。类内初始化只能对static const
整型进行。
在构造函数中使用initialization-list,如:
class CAnotherTest
{
public:
CTest obj_Test; //member declaration. no initialization here
static const int value = 100; //OK. static const integral type!
CAnotherTest() : obj_Test(CTest::EN_TEST) {}
//^^^^^^^^^^^^^^^^^^^^^^^^^^ its called initialization-list
};
const int CAnotherTest::value; //definition goes to .cpp file
相关文章:
- C++中构造函数中的枚举
- 如何使用默认值为构造函数中的枚举赋值?
- 枚举模板函数一般调用
- 枚举在构造函数和班级中被调用
- Java 类型的枚举,C++中的自定义值和构造函数
- C++使用来自不同模板类的枚举作为函数参数
- 包含枚举的结构的C 复制构造函数
- 设计问题:枚举或函数或其他什么
- 枚举器而不是用于类实例化的构造函数
- C++:使用结构或枚举重载构造函数之间的区别
- 将成员枚举变量传递给类构造函数时出现无效的重定义错误
- 我可以编写一个在 c++ 中返回到枚举的函数吗?
- C++枚举复制构造函数和赋值运算符
- 将枚举作为函数参数传递
- 将枚举传递给构造函数
- 为什么可以将枚举作为函数变量传递,但不能返回枚举?
- 在lldb中使用匿名枚举作为函数参数错误
- 枚举和函数
- 如何创建一个接收枚举的函数
- 枚举参数函数和开关优化