2013-02-12 3 views
5

Ich möchte simulierten Interface-Sterotyp in C++ mit abstrakten Klasse. Aber in Eclipse IDE ich „Mehrere Marker an dieser Linie - Der Typ‚Handler‘muss die geerbte rein virtuelle Methode implementieren ‚Handler :: SetNext‘“Der Typ a muss die vererbte reine virtuelle Methode implementieren b

Meine Frage ist, warum das ?.

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

Sind Sie sicher, dass Sie * virtuelle Vererbung * hier benötigen? Virtuelle Funktionen funktionieren auch für nicht-virtuelle Vererbung. – leemes

Antwort

19

Dies ist falsch:

Handler AQUI; 

Sie können nicht eine abstrakte Klasse instanziiert.

Sie möchten einen Zeiger auf Handler definieren und ihm die Adresse eines gültigen Objekts aus einer untergeordneten Klasse wie Oracle zuweisen.

+8

Wer zum Teufel hat das abgelehnt !? – StoryTeller

Verwandte Themen