2009-11-25 22 views
9

Sono sicuro che è possibile ma non riesco a farlo, ovvero: Come posso definire il modello di funzione all'interno della classe non template? Ho provato qualcosa del genere:Modello di funzione in classe non modello

class Stack_T 
{ 
    private: 
     void* _my_area; 
     static const int _num_of_objects = 10; 

    public: 
     // Allocates space for objects added to stack 
     explicit Stack_T(size_t); 
     virtual ~Stack_T(void); 

     // Puts object onto stack 
     template<class T> 
     void put(const T&); 

     // Gets last added object to the stack 
     template<class T> 
     T& get()const; 

     // Removes last added object from the stack 
     template<class T> 
     void remove(const T&); 
}; 

template<class T> //SOMETHING WRONG WITH THIS DEFINITION 
void Stack_T::put<T>(const T& obj) 
{ 
} 

ma non funziona. Ricevo questo messaggio di errore:

'Errore 1 Errore C2768: 'Stack_T :: messo': uso illegale di argomenti template espliciti'
Grazie

risposta

9

Non mettere il <T> dopo il nome della funzione . Questo dovrebbe funzionare:

template<class T> 
void Stack_T::put(const T& obj) 
{ 
} 

Edit:

Questo ancora non funziona se la definizione di funzione non si trova nel file di intestazione. Per risolvere questo, utilizzare uno di:

  • Inserire la definizione della funzione nel file di intestazione, all'interno della classe.
  • Inserire la definizione della funzione nel file di intestazione dopo la classe (come nel codice di esempio).
  • Utilizzare l'istanza del modello esplicito nel file di intestazione. Questo ha dei limiti gravi (devi conoscere tutti i possibili valori di T in anticipo).
+0

ho tryied questo, ma sto ottenendo un errore: 'Errore errore LNK2019: simbolo esterno non risolto "public: void __thiscall Stack_T :: mettere (int const &)" (?? $ messi @ H @ Stack_T @@ QAEXABH @ Z) indicato nella funzione _wmain \t Stack_of_Objects.obj ' –

0

Appunte a tutti coloro che mi hanno aiutato a rispondere a questa domanda. Qual è stato il mio errore principale che ho incluso nel file .h principale come con la classe concreta e ho dimenticato che con i modelli la storia è leggermente diversa e per farlo bisogna usare il modello di inclusione o separazione, che ho dimenticato. Ancora una volta grazie e mi dispiace per il disturbo.

Problemi correlati