Wzorzec template - linker error

Wzorzec template - linker error
YA
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
0

Witam, mam wzorzec i jeśli wszystko jest zdefiniowane w jednym pliku jest ok, działa, ale jeśli wzorzec jest w osobnym pliku i tworzę obiekt gdzieś w aplikacji np główna forma to linker wywala error. Przykładowo:

Kopiuj
//Unit1.h:
template <class T1, class T2>
class Test
{
  T1 te1;
  T2* te2;
public:
  Test();
};
typedef Test<int, int> TestInt;

//Unit1.cpp:
template <class T1, class T2>
Test<T1, T2>::Test()
{}

//MainUnit.h:
#include "Unit1.h"

TestInt testint;

i dostaje linker error Unresolved external 'Text<int, int>()' ale jak klasa Test jest w MainUnit.h jest ok i działa. O co chodzi?

Zellus
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 4 lata
  • Lokalizacja:Wrocław
  • Postów:474
1

Jeżeli korzystasz z template to deklaracje i definicje funkcji korzystających z nich muszą być w 1 pliku(nagłówkowym). Tak jest i trzeba się tego niestety trzymać. Podobno wprowadzono jakąś poprawkę w tej kwestii, ale nie działa ona w każdym kompilatorze, więc specjalnie się tym nie interesowałem.

edytowany 1x, ostatnio: Zellus
Endrju
Miało to naprawić export, w C++11 wywalili całkiem ten pomysł.
YA
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
0

Ok, dzięki, faktycznie jak wszystko wrzuciłem do jednego pliku nagłówkowego to działa tylko wygląda nie ciekawie bo klasa nieco spora jest hehe

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.