2013-02-12 9 views
5

抽象クラスを使用してC++でシミュレートされたインターフェイスのステレオタイプが必要です。しかし、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

答えて

19

これは間違っています:

Handler AQUI; 

抽象クラスをインスタンス化することはできません。

Handlerへのポインタを定義し、それにOracleのような子クラスの有効なオブジェクトのアドレスを割り当てます。

+8

誰がこれを落とした!? – StoryTeller

関連する問題