[C++] Konstruktor domyślny w szablonie klasy
Ostatnio zmodyfikowano 2015-07-21 16:37
Lukier Temat założony przez niniejszego użytkownika |
[C++] Konstruktor domyślny w szablonie klasy » 2015-07-21 16:02:01 Witam mam pewien problem z konstruktorem domyślnym dla szablonu klasy. Mianowicie, o ile specjalizacje dla konstruktora domyślnego działają jak należy to sam konstruktor dla reszty typów jest nie widoczny dla kompilatora jakby go wcale nie było i nie wiem dlaczego. Bym był wdzięczny jeśli ktoś by mnie oświecił i napisał co tu jest źle. list.h #ifndef LIST_H_ #define LIST_H_
template < class T > class list { T value; list * next; public: list(); };
#endif list.cpp #include <iostream> #include <string>
#include "list.h"
template < class T > list < T >::list() { next = NULL; value = 0; std::cout << "sdasd" << std::endl; }
template <> list < char >::list() { next = NULL; value = '0'; }
template <> list < std::string >::list() { next = NULL; value = ""; std::cout << "Dk\n" << std::endl; }
main.cpp #include <iostream> #include <string>
#include "list.h"
int main() { list < int >* j = new list < int >(); std::cin.get(); return 0; }
|
|
Monika90 |
» 2015-07-21 16:10:36 definicję konstruktora domyślnego i obie jego jawne specjalizacje musisz przenieść do pliku list.h |
|
Lukier Temat założony przez niniejszego użytkownika |
» 2015-07-21 16:20:10 Czyli winą jest moje nie przypilnowanie faktu, że definicja konstruktora w postaci szablonu posiada łączenie wewnętrzne w pliku, lecz w tym przypadku specjalizacje też nie powinny posiadać łączenia wewnętrznego i być również nie widoczne dla kompilatora? |
|
Monika90 |
» 2015-07-21 16:26:31 One wszystkie są łączone zewnętrznie, ale konstruktor list<int>::list() po prostu nie istnieje.
Kiedy kompilator kompiluje plik main.cpp, to wie że musi wygenerować specjalizację dla int, ale nie wie jak, bo nie ma definicji. Kiedy kompiluje list.cpp, to wie jak, ale nie wie że musi, bo w tej jednostce translacji list<int>::list() nie jest użyte. |
|
Lukier Temat założony przez niniejszego użytkownika |
» 2015-07-21 16:37:58 Rozumiem. Dziękuje za szybką odpowiedź i pomoc. |
|
« 1 » |