将类实例创建为另一个类的成员

时间:2014-09-30 12:03:45

标签: c++ visual-c++

为什么以下代码不起作用?我得到错误C2059'常数'。使用Visual C ++ 2008。

class C {
public:
    C(int arg) {}
};

class B {
public:
    C c(1); //error C2059
    B() {}
};

我无法定义默认构造函数。此外,我无法声明指向C的指针,然后"新的"在B&#39的构造函数中。

2 个答案:

答案 0 :(得分:2)

C c()被解释为函数声明,而int literal 1本身使语法无效。请考虑使用大括号(C ++ 11)或直接初始化:

C c{1};

或:

B() : c(1) {}

§8.5

  

11一个对象,其初始化程序是一组空的括号,即   (),应进行价值初始化。

     

[注意:由于不允许()   通过初始化程序的语法,

     

X a();

     

不是声明   类X的对象,但是函数的声明没有   参数并返回X.形式()是允许的   其他初始化上下文(5.3.4,5.2.3,12.6.2)。 - 结束说明]

答案 1 :(得分:1)

通常的方式来做我认为你要做的事情就是使用member initialiser list

class B {
public:
    C c;
    B() : c(1) {}
};