以下代码可以正常工作:
#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::a1
in的实现A1_Impl
(它是唯一的实现)。
但我也收到一条错误消息:
error LNK2001: unresolved external symbol ""public: virtual void __thiscall A1::a1(void)" (?a1@A1@@UAEXXZ)".
我对此有点困惑。为什么 A1_Impl 中的实现不起作用?从 B1 派生 B_Combined 应该只添加一个b1
调用 in 实现的A1::a1
新方法A1_Impl
。