2013-02-12 143 views
5

我想在C++中使用抽象类模拟接口sterotype。但在Eclipse IDE中我碰到一个“在这一行 多个标记 - 类型‘处理程序’必须实现继承纯虚方法 ‘处理器:: setNext’”类型a必须实现继承的纯虚方法b

我的问题是,为什么这个?

handler.h中

class Handler { 
public: 

    virtual void setNext(Handler &next) = 0; 
    Handler(); 
    virtual ~Handler(); 
    virtual void process() = 0; 
public: 

    Handler *nextInChain; 

}; 

Handler.cpp

#include "Handler.h" 
Handler::Handler(){ 
} 
Handler::~Handler(){ 
} 

Oracle.h

#include "Handler.h" 
class Oracle : virtual public Handler { 
public: 
    Oracle(); 
    virtual ~Oracle(); 
    virtual void process(); 
    virtual void setNext(Handler &next); 
private: 

}; 

Oracle.cpp

#include "Oracle.h" 

Oracle::Oracle(){ 
Handler AQUI;//AQUI I get Multiple markers at this line 
      //- The type 'Handler' must implement the inherited pure virtual method 
//'Handler::setNext' 
} 

Oracle::~Oracle(){ 
} 

void Oracle::process(){ 
} 

void Oracle::setNext(Handler &next){ 
} 
+1

您确定在这里需要*虚拟继承吗?虚拟函数也适用于非虚拟继承。 – leemes 2013-02-12 20:11:07

回答

19

这是不正确的:

Handler AQUI; 

你不能实例化一个抽象类。

你想要做的是定义一个指向Handler的指针,并为其指定一个子类的有效对象的地址,如Oracle

+8

地狱谁低估了这个!? – StoryTeller 2013-02-12 20:06:13

相关问题