2013-02-12 29 views
5

Tôi muốn mẫu thử giao diện mô phỏng trong C++ bằng cách sử dụng lớp trừu tượng. Nhưng trong IDE Eclipse, tôi nhận được "Nhiều điểm đánh dấu tại dòng này - Loại 'Trình xử lý' phải triển khai phương pháp ảo thuần túy được thừa kế 'Trình xử lý :: setNext'"Loại phải thực hiện phương pháp ảo thuần túy được thừa kế b

Câu hỏi của tôi là Tại sao lại như vậy ?.

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

Bạn có chắc là bạn cần * kế thừa ảo * ở đây không? Các hàm ảo cũng làm việc cho việc thừa kế không phải ảo. – leemes

Trả lời

19

Điều này không chính xác:

Handler AQUI; 

Bạn không thể khởi tạo lớp trừu tượng.

Những gì bạn muốn làm là xác định con trỏ đến Handler và chỉ định địa chỉ của đối tượng hợp lệ từ lớp con, như Oracle.

+8

Ai là địa ngục downvoted này !? – StoryTeller

Các vấn đề liên quan