2011-07-14 50 views
1

为什么不能编译?成员对象的构造函数和枚举

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

回答

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) {} 
}; 
3

你不能这样初始化。类内初始化可以仅为static const整型。

使用初始化列表在构造函数中,如:

3

因为你的CAnotherTest语法是错误的。也许你的意思是这样的?

class CAnotherTest 
{ 
    public: 
    // Constructor  vvv Initialise member variable 
    CAnotherTest() : obj_Test(CTest::EN_TEST) {} 

    // Member variable 
    CTest obj_Test; 
};