Linkowanie i szablony C++

0

Mam problem z linkowaniem, wysypują mi się dziwne błedy w xcode z tym właśnie zwiazane. Mam pliki a1.h i a1.cpp (include a1.h), potem b1.h (include a1.h) i b1.cpp (include b1.h) oraz plik z mainem (include a1.h)? Czy dobrze to rozwiazalem?
Druga sprawa to szablony, jak w a1.h mam szablon klasy a1 i deklaracje funkcji func() to w a1.cpp definicja funkcji wygląda tak:

template <typename T>
void a1<T>::func() {
...
}
 

Czy to jest dobrze?

0

Zazwyczaj źle. Implementacje szablonów, z których mają korzystać inni, muszą być w plikach nagłówkowych. Kompilator musi znać kod szablonu.

0

Kompilator musi znać kod szablonu.
To nie do końca tak. Nie musi znać — wystarczy mu prototyp funkcji. Ale nie wygenerowany zostanie kod specjalizowanej funkcji szablonowej, przez co będzie błąd linkera — chyba że w innym pliku będzie jawna specjalizacja z tym samym typem <T>, dzięki czemu kod się wygeneruje, a linker potem go odnajdzie.

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