ďťż

Ładny brzuch

Witam.
Mam trzy pliki:

// plik.h template<class T> class Pole { private:     T* pole;     int dl; public:     Pole (int d); };

// plik1.cpp #include "plik.h" export template<class T> Pole<T>::Pole(int d):dl(d) { pole = new T[d]; for (int i=0;i<d;++i)     pole[i]=T(0); }

// plik.cpp #include "plik.h" Pole<int> p(20);

i przy kompilacji w BCB wypisuje mi cos takiego:
Unresolved external 'Pole<int>::Pole<int>(int)' referenced from (...)PLIK.OBJ
Nie znajduje chyba definicji konstruktora czy co?
pomóżcie...



Przy szablonach deklaracja i definicja powinna byc w tym samym pliku(i tio ma byc plik *.h). Spowodowane jest to tym, ze szablony generowanbe sa w miare potrzeb w czasei kompilacji, a w przypadku kiedy deklaracja jest osobno kompilowana to nie ma mozliwosci wygenerowania jakiegos konkretnego typu dla szablony.

Chyba zamotalem, ale tak troszeczke :D


Witam.
(...)
i przy kompilacji w BCB wypisuje mi cos takiego:
Unresolved external 'Pole<int>::Pole<int>(int)' referenced from (...)PLIK.OBJ
Nie znajduje chyba definicji konstruktora czy co?
pomóżcie...


Czy ty wiesz jak się definiuje pliki nagłówkowe ???
Czy wiesz jak się definiuje funkcje które są w szablonach ??

Nie bardzo wiem o co ci chdzi z tym definiowaniem...
Czy to jest źle zdefioniwane?
template<class T> Pole<T>::Pole(int d):dl(d) { pole = new T[d]; for (int i=0;i<d;++i)    pole[i]=T(0); }
A jesli dobrze czy może sie znajdowac w pliku naglówkowym?

I jeszcze pytanie o ten kawalek:
emplate<class T> Pole<T>::Pole(int dd) { dl=dd; Dlugosc(); } template<class T> void Pole<T>::Dlugosc() { printf("%d",dl); }
nie rozumiem co robic, i w jakim celu, w konstruktorze funkcja Dlugosc()...

I jeszcze jedna sprawa:
// plik1.cpp #include "plik.h" export template<class T> Pole<T>::Pole(int d):dl(d) { pole = new T[d]; for (int i=0;i<d;++i)    pole[i]=T(0); }
czy "export" nie załatwia tutaj sprawy umieszczenie deklaracji i definicji w różnych plikach?
Użytkownik Atal edytował ten post 07 sierpień 2005, 13:01


Sam sobie zdefiniowałem, tak by sprawdzić czy działa poprawnie.
Mylisz plik nagłowkowy z szablonem :excl: i dlatego zadajesz kolejne glupie pytanie.
Jak ci Dlugosc() nie pasi to wykasuj. Napisałem to po to (czytaj 1 zdanie) a ponad to byś oszczędził sobie pytania jak się definiuje funkcje w szablonach. Dlaczego nie przeanalizujesz tego co napisałem ? tylko piszesz kolejnego ? B)

Ależ ja przeanalizowałem to co napisałeś.
I nie znalazłem tam odpowiedzi na moje pierwsze pytanie:
dlaczego to nie działa...
przecież w C++ definicja, deklaracja metod wzorca
i wywoplanie wzorca (konstruktora wzorca) mogą
byc w trzech różnych plikach byle deklaracje opatrzeć
słowem "export". (chyba, że się mylę)
i tego własnie dotyczyło moje pytanie...
a nie tworzenie plików nagłowkowych.
Coś nie możemy się zrozumieć.

Pozdrawiam Atal


Coś nie możemy się zrozumieć.
Pozdrawiam Atal

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •