2014-09-30 171 views
-1

为什么下面的代码不起作用?我得到错误C2059'不变'。使用Visual C++ 2008.创建类实例作为另一个类的成员

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

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

我无法定义默认构造函数。此外,我不能声明一个指向C的指针,然后在B的构造函数中“new it”。

+0

_“我认为绝对没有错我的代码。” _哪种学习资源教会你如何在类定义内初始化成员? – 2014-09-30 12:28:33

+0

我不明白你为什么不得不删除这个句子。 – devguy24 2014-09-30 13:13:09

+0

这完全没有意义,也没有增加这个问题。这仅仅是“我的代码必须是正确的,我看到我所做的事情绝对没有错”,这是什么,这是别人的错?编译器坏了?该语言的设计思路不是以_you_为标准的?显然你犯了一个错误,你的小“没有错”不会改变这一点。 – 2014-09-30 13:19:00

回答

2

C c()被解释为一个函数声明,并且整数文字本身使语法无效。考虑使用括号代替(C++ 11)或直接初始化:

C c{1}; 

或:

B() : c(1) {} 

§8.5

11,其初始化为空集括号的一个目的,即 (),应进行值初始化。

[注意:由于()不是由语法初始化允许 ,

X a();

不是X类的 对象的声明,而是一个函数的声明不采取任何 参数并返回一个X. ()表格允许在其他初始化上下文(5.3.4,5.2.3,12.6.2)中使用。 - 注完]

+0

C c {1};给我编译器错误C2473'c'看起来像一个函数定义,但没有参数列表。 – devguy24 2014-09-30 12:20:17

相关问题