Szablony C++ - problem z rozdzielaniem klas na dwa pliki

2011-10-14 14:10
0

Witam!

Zgodnie z tym czego mnie nauczono próbuję napisać klasę szablonową w dwóch plikach - .h i .cpp

Oczywiście w .h umieszczam deklarację klasy, wewnątrz niej tylko deklaracje metod, a w pliku .cpp umieszczam definicje metod, oto przykład jednej z nich:

 template<class T>
Node<T>* lista<T>::begin()
{
    return first;
}

Jednak kompilator wywala błąd: undefined reference to lista<int>::begin() w miejscu gdzie chce wywołać tą metodę. Dodam, że w mainie załączam plik nagłówkowy, plik cpp załączony jest do projektu, używam Code::Blocks i jeśli skopiuję definicję tej metody do pliku nagłówkowego, poza deklarację klasy to wszystko hula. Jestem jedna przyzwyczajony do rozdzielania klas na dwa pliki i chciałbym dowiedzieć się dlaczego to nie działa?

edytowany 2x, ostatnio: madmike, 2011-10-15 01:24

Pozostało 580 znaków

2011-10-14 14:52
0

Klasy szablonowe powinny mieć deklaracje w nagłówku bo kompilator musi je znać przed linkowaniem. Zmienia to standard C++11


Co niby zmienia? - Endrju 2011-10-14 16:20
Koledze chyba chodziło o extern i możliwość rozdzielenia definicji od deklaracji w nowym standardzie, bez większych 'protez', a o protezach możesz poczytać tu http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12 - stalk3r 2011-10-14 17:13
Raczej export, poza tym usunięto to ze standardu. - Endrju 2011-10-14 17:22
export oczywiści:) - stalk3r 2011-10-14 19:53
no to w C++11 rzeczywiście to zmieniono, ale w drugą stronę: w pełni zgodny z C++03 kompilator pozwala na rozdzielenie deklaracji i definicji funkcji szablonowej, a w C++11 tę możliwość właśnie usunięto. - Azarien 2011-10-17 15:41
Dokładnie tak. AFAIK i tak nigdzie to nie działało w 100%. - Endrju 2011-10-17 17:02

Pozostało 580 znaków

2011-10-16 22:57
0

Dzięki wielkie. Trochę to komplikuje przejrzystość, moim zdaniem, ale trudno, trzeba się przyzwyczaić.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0