2013-02-12 20 views
5

Voglio sterotype di interfaccia simulato in C++ usando la classe astratta. Ma in Eclipse IDE ottengo "multipli marcatori in questa linea - Il tipo 'Handler' deve implementare il metodo virtuale puro ereditato 'Handler :: SetNext'"Il tipo a deve implementare il metodo virtuale puro ereditato b

mia domanda è perché questo ?.

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

Sei sicuro di aver bisogno di * ereditarietà virtuale * qui? Le funzioni virtuali funzionano anche per l'ereditarietà non virtuale. – leemes

risposta

19

Questo non è corretto:

Handler AQUI; 

Non è possibile creare un'istanza di una classe astratta.

Quello che si vuole fare è definire un puntatore a Handler e assegnargli l'indirizzo di un oggetto valido da una classe figlia, come Oracle.

+8

Who the hell downvoted this !? – StoryTeller

Problemi correlati