02/04/10 8:56
robrock80
Salve a tutti. Dato la seguente classe base definita in un file header
e il codice di implementazione di tutti i metodi virtuali meno che uno
Perchè quando vado a richiamare i suoi metodi in una classe figlio di una classe figlio con il codice
P.S.: se nell'header invece scrivo la classe in questa maniera
tutto funziona, ma io vorrei scrivere l'implementazione dei metodi in un file .cpp
template<class Type> class _Command{ public : _Command(){}; virtual ~_Command(); //Funzione virtuale pura virtual bool execute(Type&) = 0; virtual char* getId(); virtual char* getDescription(); virtual char* getMessage(int idx); protected: char* id; char* description; char** messages; virtual void createMessagesArray(int size); private: int messagesLength; };
e il codice di implementazione di tutti i metodi virtuali meno che uno
template <class Type> _Command<Type>::~_Command(){ if(messages!=0) { freeSizeKnownCharMatrix(messages, messagesLength); } } template <class Type> char* _Command<Type>::getId() { return this->id; } template <class Type> char* _Command<Type>::getDescription(){ return this->description; } template <class Type> char* _Command<Type>::getMessage(int idx) { return this->messages[idx]; } template <class Type> void _Command<Type>::createMessagesArray(int size) { if(messages == 0) { messagesLength = size; this->messages = (char**)malloc(sizeof(char*) * (messagesLength)); } else { freeSizeKnownCharMatrix(messages, messagesLength); messagesLength = size; this->messages = (char**)malloc(sizeof(char*) * (messagesLength)); } }
Perchè quando vado a richiamare i suoi metodi in una classe figlio di una classe figlio con il codice
_Command::createMessagesArray(3);il compilatore mi dice template<class Type> class _Command' used without template parameters?
P.S.: se nell'header invece scrivo la classe in questa maniera
template<class Type> class _Command{ public : _Command(){}; virtual ~_Command(){ if(messages!=0) { freeSizeKnownCharMatrix(messages, messagesLength); } } //Funzione virtuale pura virtual bool execute(Type&) = 0; virtual char* getId(){ return this->id; } virtual char* getDescription(){ return this->description; } virtual char* getMessage(int idx){ return this->messages[idx]; } protected: char* id; char* description; char** messages; virtual void createMessagesArray(int size){ if(messages == 0) { messagesLength = size; this->messages = (char**)malloc(sizeof(char*) * (messagesLength)); } else { freeSizeKnownCharMatrix(messages, messagesLength); messagesLength = size; this->messages = (char**)malloc(sizeof(char*) * (messagesLength)); } } private: int messagesLength; };
tutto funziona, ma io vorrei scrivere l'implementazione dei metodi in un file .cpp
aaa