以下代码完美无缺:
#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
中A1_Impl
的实现(它是唯一的实现)。
但我也收到一条错误消息:
error LNK2001: unresolved external symbol ""public: virtual void __thiscall A1::a1(void)" (?a1@A1@@UAEXXZ)".
我对此感到有点困惑。为什么A1_Impl中的实现不起作用?从B1派生B_Combined只应添加一个新方法b1
,在A1::a1
中调用A1_Impl
的实现。
答案 0 :(得分:0)
您发布的代码编译得很好。但是,您提到的链接错误将来自声明
class B_Combined : virtual public A1_Impl, virtual public B1
{
};
您可以在A1::a1();
中致电virtual void B1::b1
,但A1::a1
是纯抽象的。除非您为其提供正文,否则不得致电A1::a1
。