2014-04-17 4 views
0

Я реализовал шаблон проектирования команд таким образом, но если я раскомментирую деструктор в классе команд, он дает ошибку связывания. Зачем ?Проблема с шаблоном проектирования команд в C++

#include <iostream> 

using namespace std; 
//command design pattern 


class command 
{ 
public: 
    virtual void execute() = 0; 
    //virtual ~command(); 

}; 


class Receiver 
{ 
public : 
    void action() 
    { 
     cout<<" command executed "<<endl; 
    } 

}; 

class concreteCommand:public command 
{ 
    Receiver *_r; 
public: 
    concreteCommand(Receiver *r = 0) :_r(r) 
    {} 
    void setReceiver(Receiver *r = 0) 
    { 
     _r = r; 
    } 
    virtual void execute() 
    { 
     if(0!=_r) 
     { 
      _r->action(); 
     } 
    } 
}; 

class invoker 
{ 
    command *_c; 
public: 
    invoker(command* c):_c(c) 
    {} 
    void setCommand(command *c=0) 
    { 
     _c=c; 
    } 
    void invoke() 
    { 
     if(0!=_c) 
     { 
      _c->execute(); 
     } 
    } 

}; 





int main() 
{ 
    Receiver r; 
    concreteCommand c(&r); 
    invoker i(&c); 
    i.invoke(); 
    return 0; 
} 
+3

Потому что вы не * реализуете * функцию деструктора? –

ответ

0

Обнаружили ошибку. Я должен предоставить тело деструктору.

Смежные вопросы