为什么不编译?
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
答案 0 :(得分:3)
你无法像这样初始化。可以仅对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
答案 1 :(得分:3)
由于,
CTest obj_Test(CTest::EN_TEST);
被评估为名为obj_Test
的函数。现在它应该将参数作为类型,但是,CTest::EN_TEST
是一个值,而不是一个类型。
如果它是obj_Test
一个对象,那么你在构造函数中将CTest::EN_TEST
传递给它:
class CAnotherTest
{
public:
CAnotherTest () : obj_Test(CTest::EN_TEST) {}
};
答案 2 :(得分:3)
因为CAnotherTest
的语法错误。也许你的意思是这样的?
class CAnotherTest
{
public:
// Constructor vvv Initialise member variable
CAnotherTest() : obj_Test(CTest::EN_TEST) {}
// Member variable
CTest obj_Test;
};