【发布时间】:2017-09-04 11:40:32
【问题描述】:
我有课程CFirst 和CSecond。
第二节课我什么都做不了,但第一节课我可以做点什么。
我正在尝试从第一个中的第二个创建一个对象,但编译器仍然不满意。
目前最好的是:
class CFirst{
public:
CSecond m_sec;
CFirst ( const CSecond & sec ) {
CSecond m_sec(sec.a(),sec.b());
};
class CSecond{
public:
CSecond ( int a, int b) : m_A ( a ), m_B ( b ){ }
int a ( void ) const { return m_A; }
int b ( void ) const { return m_B; }
private:
int m_A;
int m_B;
};
但编译器说:
“CFirst”的构造函数必须显式初始化成员“m_sec” 它没有默认构造函数。
你有什么建议吗?
编辑:
我也尝试过(没有成功)
m_sec(sec.a(),sec.b());
而不是
CSecond m_sec(sec.a(),sec.b());
解释在答案下面的cmets中。
【问题讨论】:
-
初始化成员的正确语法是您在
CSecond中为m_A和m_B使用的语法。 -
另外,你需要先声明
CSecond,然后才能在CFirst::CFirst(const CSecond&)中引用它,所以你的类定义在这里是乱序的。
标签: c++ class c++11 constructor compiler-errors