[c++] Szablon, dziedziczenie
Ostatnio zmodyfikowano 2016-01-07 13:31
break_da_funk Temat założony przez niniejszego użytkownika |
[c++] Szablon, dziedziczenie » 2016-01-07 13:06:05 Witam! Nie rozumiem, dlaczego linker krzyczy mi, że nie może znaleźć referencji do metody. Poniżej kod: Plik File1.cpp#include "File2.h"
int main() { Derived derived_obj; derived_obj.test(); return 0; }
Plik File2.cpp#include "File2.h"
template < class T > void Base < T >::test( void ) { cout << "Testing" << endl; }
Plik File2.h#ifndef FILE2_H_ #define FILE2_H_ #include <iostream> using namespace std;
template < class T > class Base { T t; public: T give_me_T( void ) { return t; } void test( void ); virtual ~Base() { }; };
class Derived : public Base < int > { public: Derived() { }; };
#endif
Jeśli zmienię kod usuwając szablon (np zmieniając na int) to poprawnie uzyskuje plik wykonywalny. Będę bardzo wdzięczny za wyjaśnienie dlaczego dziedzicząc skonkretyzowaną klasę linker nie widzi implementacji metody z klasy bazowej?... |
|
pekfos |
» 2016-01-07 13:27:27 Szablony definiuje się w plikach nagłówkowych. |
|
carlosmay |
» 2016-01-07 13:27:42 #include "File2.h"
template < class T > void Base < T >::test( void ) { cout << "Testing" << endl; }
|
Bo to jest szablon, a nie gotowa funkcja. Umieść ją w pliku nagłówkowym. Przykład: Szablony funkcji w kilku plikach |
|
break_da_funk Temat założony przez niniejszego użytkownika |
» 2016-01-07 13:31:38 Dziękuje za odpowiedzi. |
|
« 1 » |