【发布时间】:2014-03-01 23:55:03
【问题描述】:
以下代码运行良好:
#include "stdafx.h"
class A1
{
public:
virtual void a1() = 0;
};
class B1 : virtual public A1
{
public:
virtual void b1()
{
A1::a1();
}
};
class A1_Impl : virtual public A1
{
public:
virtual void a1() {}
};
class B_Combined : virtual public A1_Impl/*, virtual public B1*/
{
};
int _tmain(int argc, _TCHAR* argv[])
{
B_Combined b;
return 0;
}
删除/* 和*/ 后,编译器会显示"'B_Combined': inherits 'A1_Impl::A1_Impl::a1' via dominance" 警告。我想没关系,因为我希望 B_Combined 继承 A1_Impl 中的 A1::a1 的实现(它是唯一的实现)。
但我也收到一条错误消息:
error LNK2001: unresolved external symbol ""public: virtual void __thiscall A1::a1(void)" (?a1@A1@@UAEXXZ)".
我对此有点困惑。为什么 A1_Impl 中的实现不起作用?从 B1 派生 B_Combined 应该只添加一个新方法 b1 在 A1_Impl 中调用 A1::a1 的实现。
【问题讨论】:
-
对我来说很好用:ideone.com/817Pli
-
@user3369521 请出示你的真实代码,这样编译正常
标签: c++ inheritance linker pure-virtual diamond-problem