Eclipse报告了有效cpp继承的错误
Eclipse reports bug on valid cpp inheritance
Eclipse报告了"new Listener()"上的一个错误,尽管它是用g++编译和执行的。请注意,这些类的数据比这里列出的要多,因为这是经过修剪的,所以删除看似空的类不是一个选项。有什么可以添加/更改的东西可以让Eclipse和g++都满意吗。不过,我将无法更改Base*类。
class BaseIntf {
public:
virtual ~BaseIntf() {}
virtual void foo() = 0;
};
class BaseImpl: public virtual BaseIntf {
public:
virtual void foo() {}
};
class ListenerBaseInft: public virtual BaseIntf {
};
class Listener: public ListenerBaseInft, public BaseImpl {
};
int main(int argc, char *argv[]) {
// Eclipse:
// The type 'Listener' must implement the inherited pure virtual method 'BaseIntf::foo'
Listener* listener = new Listener();
listener->foo();
return 0;
}
C++有一个称为优势的特性。通常,当一个类(比如A
)是从两个类(比方说A1
和A2
)派生的,每个类都实现相同的虚拟函数(比如说void f()
)时,派生的类也需要实现该函数。纯虚拟函数也算是一种实现。
然而,有一个例外:当A1
本身是从A2
派生而来时,则A1
对f()
的实现被称为主导对A2
的实现,而后者被排除在考虑之外。因此,A
不必重新实现f()
。
您的编译器可能没有考虑到该异常。这是一个编译器错误。
要解决此问题,请在Listener
:中定义foo
void foo() { BaseImpl::foo(); }
这很难看,但编译器错误也是如此。
相关文章:
- 多级继承错误 C2280:"atttempting to reference a deleted function"
- 谷神星求解器成本函数继承错误:模板可能不是虚拟的
- C 预期的类名称{token,一个继承错误
- C++ 继承:错误:候选人需要 1 个参数,提供 0
- 继承错误:'{'标记之前的预期类名
- C++类多重继承错误
- 用模板类中的C 继承错误
- 在堆栈上分配对象时发生C++继承错误
- C++嵌套继承错误"expected class-name before ‘{’ token"
- 继承:错误:聚合类型A的类型不完整,无法定义
- 多重继承错误'invalid use of incomplete type'
- 继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员
- C++ 继承错误:不明确的错误
- 类继承错误:私有成员
- 继承错误
- C++构造函数继承错误
- c++中的继承:错误C2011
- 多级继承错误"cout does not name a type"
- c++中模板继承错误
- c++类继承错误