2009-11-25 13 views
9

Jestem pewien, że jest to możliwe, ale po prostu nie mogę tego zrobić, czyli: Jak zdefiniować szablon funkcji w klasie innej niż szablon? Wypróbowałem coś takiego:Szablon funkcji w klasie innej niż szablon

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) 
{ 
} 

ale to nie działa. Dostaję ten Komunikat o błędzie:

„Error 1 error C2768:«Stack_T :: umieścić»: nielegalne stosowanie jednoznacznych argumentów szablonu”
Dziękuję

Odpowiedz

9

Nie umieścić <T> po nazwie funkcji . To powinno działać:

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

Edit:

to nadal nie będzie działać, jeśli nie jest definicja funkcji w pliku nagłówkowym. Aby rozwiązać ten problem, użyj jednego z następujących:

  • Umieść definicję funkcji w pliku nagłówkowym wewnątrz klasy.
  • Umieść definicję funkcji w pliku nagłówkowym po klasie (jak w przykładowym kodzie).
  • Użyj jawnej instancji szablonu w pliku nagłówkowym. Ma to jednak poważne ograniczenia (musisz wcześniej znać wszystkie możliwe wartości T).
+0

I tryied tego ale dostaję błąd: „Błąd błąd LNK2019: nierozwiązanych zewnętrznych symbolu "public: void __thiscall Stack_T :: umieścić (int const &)"(?? $ umieścić @ H @ Stack_T @@ QAEXABH @ Z) wymienione w funkcji _wmain \t Stack_of_Objects.obj ' –

0

Apel do wszystkich, którzy próbowali mi pomóc w tym pytaniu. Jaki był mój główny błąd, który zawarłem w głównym pliku .h, jak w przypadku konkretnej klasy, i zapomniałem, że z szablonami historia jest nieco inna, a do tego trzeba użyć modelu integracji lub separacji, o którym zapomniałem. Jeszcze raz dziękuję i przepraszam, że zawracam sobie głowę.

Powiązane problemy