我想要有一个接口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();
};
错误 C2259: 'B' : 无法实例化抽象类
原因是以下成员:
'void IA::foo(void)' : 是一个抽象函数
main
函数有一个打字错误(或者说是思维错误),我实例化了A
而不是B
。 - Steve JessopIA
类的IB::foo()
在B
类中未声明。A::foo()
看起来相同,但实际上并不是。虚继承将“合并”这些函数。 - ali_bahoo