【发布时间】:2011-07-31 17:00:18
【问题描述】:
我想要一个接口 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)' : 是抽象的
【问题讨论】:
-
@SteveJessop:什么版本? 4.1.2 rejects it, as does 4.3.4.
-
使用 A:foo 似乎没有帮助
-
@Tomalak:我的
main函数中有一个错字(好吧,想想吧),我实例化了A而不是B。 -
您必须使用虚拟继承。
IB::foo()来自IA类在B类中未声明。A::foo()看起来一样,但事实并非如此。虚拟继承将“合并”这些功能。
标签: c++ inheritance interface