我想要一个接口(interface) IA 和另一个扩展它的 IB。
A 实现 IA,B 继承 A 并实现 IB。
但是,当编译 B 时出现错误,说 IA 的东西是未定义的,即使 A 定义了它:(
class IA
{
public:
virtual ~IA(){}
virtual void foo()=0;
};
class IB : public IA
{
public:
virtual void bar()=0;
};
class A : public IA
{
public:
A();
void foo();
};
class B : public A, public IB
{
public:
B();
void bar();
};
error C2259: 'B' : cannot instantiate abstract class
due to following members:
'void IA::foo(void)' : is abstract
最佳答案
查看 C++ 常见问题解答,从以下几点开始:https://isocpp.org/wiki/faq/multiple-inheritance#mi-diamond
它详细解释了“可怕的钻石”和虚拟继承。
关于C++ 接口(interface)和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581806/