首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中虚继承的有关问题,比较急

2012-12-29 
C++中虚继承的问题,比较急。我写了一个测试代码,可总是通不过。大家来看看是什么原因。怎样解决。因为赶紧度,

C++中虚继承的问题,比较急。
我写了一个测试代码,可总是通不过。大家来看看是什么原因。怎样解决。因为赶紧度,比较急。先谢谢大家了。


[解决办法]
在class Base里面加一个无参构造函数 具体如下
class Base { 
public:     Base( int a ){ m_A = a;}   
Base();
int m_A;
 };

编译通过     
[解决办法]
错误信息里很明确了
没有定义Base::Base()
虚继承和普通继承不同,比较复杂,在多层继承体系中,你可以当它总是最低一级派生类的直接成员
你可以去找一本《深度探索 C++ 对象模型》 里面讲得比较透

[解决办法]
为避免构造函数重复运行,虚基类的构造是不由直接派生类负责的,改由最高派生类负责。在你的例子中,最高派生类是derived_2,因此由它负责初始化Base,derived_1中的Base(1)实际上不起任何作用,即使你在初始化列表中显式调用。

但在derived_2中你没有调用Base的构造函数,于是编译器就试图调用Base的默认构造函数,不幸地,你没有提供默认构造函数,而且由于你提供了B的自定义构造函数,导致编译器也不会自动提供默认构造函数,因此编译结果才会报找不到Base的默认构造函数。

解决方法很简单,或者在derived_2的成员初始化列表中显式调用Base的构造函数,或者在Base中提供你的默认构造函数或者删除所有自定义构造函数。

热点排行