2013-02-12 29 views
5

'u uygulamalıdır. C++ 'da simüle edilmiş arabirim sterotipini soyut sınıf kullanarak istiyorum. Ama Eclipse IDE alıyorum "Bu hat birden çok serbest belirteçler - miras saf sanal yöntem uygulamalıdır tipi 'Handler' 'Handler :: setNext'"Devralınan saf sanal yöntem b

Sorum bu neden ?.

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

* Sanal devralmaya * gereksiniminiz olduğundan emin misiniz? Sanal işlevler sanal olmayan kalıtım için de çalışır. – leemes

cevap

19

Bu yanlıştır:

Handler AQUI; 

Sen soyut bir sınıf örneğini olamaz.

Ne yapmak istediğiniz Handler işaretçisini tanımlamak ve Oracle gibi bir alt sınıftan geçerli bir nesnenin adresini atamadır.

+8

Bunu kimin kestiği !? – StoryTeller

İlgili konular