为什么下面的代码不起作用?我得到错误C2059'不变'。使用Visual C++ 2008.创建类实例作为另一个类的成员
class C {
public:
C(int arg) {}
};
class B {
public:
C c(1); //error C2059
B() {}
};
我无法定义默认构造函数。此外,我不能声明一个指向C的指针,然后在B的构造函数中“new it”。
为什么下面的代码不起作用?我得到错误C2059'不变'。使用Visual C++ 2008.创建类实例作为另一个类的成员
class C {
public:
C(int arg) {}
};
class B {
public:
C c(1); //error C2059
B() {}
};
我无法定义默认构造函数。此外,我不能声明一个指向C的指针,然后在B的构造函数中“new it”。
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)中使用。 - 注完]
C c {1};给我编译器错误C2473'c'看起来像一个函数定义,但没有参数列表。 – devguy24 2014-09-30 12:20:17
通常的方法做什么,我认为你正在试图做的是一个member initialiser list:
class B {
public:
C c;
B() : c(1) {}
};
_“我认为绝对没有错我的代码。” _哪种学习资源教会你如何在类定义内初始化成员? – 2014-09-30 12:28:33
我不明白你为什么不得不删除这个句子。 – devguy24 2014-09-30 13:13:09
这完全没有意义,也没有增加这个问题。这仅仅是“我的代码必须是正确的,我看到我所做的事情绝对没有错”,这是什么,这是别人的错?编译器坏了?该语言的设计思路不是以_you_为标准的?显然你犯了一个错误,你的小“没有错”不会改变这一点。 – 2014-09-30 13:19:00