szablonem klasy w wielu plikach

0

otóż mam mały problem z szablonem klas,mam w nim 3 konstruktory i zaden z nich nie chce dzialac jesli znajduje sie poza plikiem nagłówkowym w którym klasa wystepuje.Jeśli zas konstruktor(bez zadnych zmian) umieszcze w pliku z klasa dziala poprawnie...Wolalbym jednak miec klase w kilku plikach aby miec jakis porzadek w kodzie.
Zamieszcze potrzebny kod :

urywek klasy

template <class typ>
class wskaznik
{
    typ *zmienne;
    int ile; //ile tych zmiennych mamy
    public :
    //konstruktory
    wskaznik();
    wskaznik(int miejsce);
    wskaznik(wskaznik &kopia);

};

jeden z konstruktorow(bez argumentu)

template <class typ>
wskaznik<typ>::wskaznik()
{
    ile = -1;
}

definicja obiektu klasy
wskaznik<int> wsk;

probowalem roznymi sposobami ale nie moge znalezc rozwiazania =/

oczyiwscie w pliku w ktorym chce umiescic konstruktory jest zalaczony plik naglowkowy z klasa.Sam plik naglowkowy ma takze straznika nagłówka.

0

Taka wada szablonów, że cały ich kod MUSI być w nagłówku.
Kompilator generuje kod szablonu w momencie napotkania użycia danego szablonu, więc jeśli w danym miejscu nie wie jak ma wygenerować taki kod (bo nie ma jego treści) to jest problem. Skutek tego taki, że kod szablonu musi być w nagłówku.
Niektórzy mówią, że szablony w C++ to tylko takie bardziej inteligentne makra.

0

no to cóż...w takim razie wszystko trzeba wrzucic w jeden plik,ale to bedzie dlugie ;X.
thx za odpowiedz.

0

wg najnowszysch standardow ktore jeszcze nie sa stosowane w tych kompilatorach ktorych bysmy chcieli, istnieje slowo kluczowe export ktore pozwala rozszczepiac template'y na .hpp i .cpp... niestety obecnie export jest rozumiany chyba tylko przez comeau i vs2010 acz za ten ostatni nie recze

0

Comeau i Intel. VS 2010 rzuca warningiem (a po nim errorami): "'export' keyword is not yet supported, but reserved for future use".

Swoją drogą, czy tylko mi się wydaje głupie, że te "najnowsze standardy" pochodzą z roku 1998 (w 2003 były niewielki poprawki), a ciągle prawie nikt tego nie wspiera?

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