成员对象构造函数和枚举

member object constructor and enum

本文关键字:枚举 构造函数 成员对象      更新时间:2023-10-16

为什么不能编译?

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