读书人

关于继承中初始化引用变量解决办法

发布时间: 2012-02-17 17:50:42 作者: rapoo

关于继承中初始化引用变量
各位,我有如下代码,

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) {} 这样就不会有错了.

读书人网 >C++

热点推荐