为什么以下代码不起作用?我得到错误C2059'常数'。使用Visual C ++ 2008。
class C {
public:
C(int arg) {}
};
class B {
public:
C c(1); //error C2059
B() {}
};
我无法定义默认构造函数。此外,我无法声明指向C的指针,然后"新的"在B&#39的构造函数中。
答案 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) {}
};