2013-02-12 14 views
5

लागू करना आवश्यक है, मैं अमूर्त वर्ग का उपयोग कर सी ++ में अनुरूपित इंटरफ़ेस स्टीरोटाइप चाहता हूं। लेकिन ग्रहण आईडीई में मैं "इस लाइन पर एकाधिक मार्करों - प्रकार 'हैंडलर' विरासत में मिला शुद्ध आभासी विधि को लागू करना चाहिए 'हैंडलर :: setNext'"प्रकार को विरासत में शुद्ध वर्चुअल विधि बी

मेरा प्रश्न यह क्यों है ?.

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

संबंधित मुद्दे