关于继承中初始化引用变量
各位,我有如下代码,
class A
{
public:
A(int&);
protected:
int& a;
};
A::A(int& aa):a(aa) {}
class B: public A
{
public:
B(int&);
};
B::B(int& bb) {a = bb;}
int main()
{
int aa = 6;
B BB(aa);
return 0;
}
编译说
error C2512: 'A ' : no appropriate default constructor available
不知何解,请大家帮帮忙。
[解决办法]
B::B(int& bb) {a = bb;}
你没有定义默认的a构造函数,因此必须明确写上调用的是哪个a构造函数。
不然就必须加上一个a()『』;
[解决办法]
类A没有默认构造函数,
B的构造函数会调用A的构造函数来初始化类A的数据成员。
你在B的构造函数中没有调用,会默认调用A的默认构造函数,
但你又没有A的默认构造函数,所以出错
1.添加A默认构造函数
2.改成形如 B(int&):A(int&) { }
[解决办法]
B::B(int& bb) : A(bb) {}
[解决办法]
前面的几位仁兄都已经说得很明白了,我来总结一下:
1. 引用只能在初始化列表中初始化,所以在构造函数的时候就必须初始化成员变量a
2. B::B(int& bb) : A(bb) {} 这样就不会有错了.