Próbuję użyć klasy szablonu i kiedy go skompilować w jednym pliku w LWS to działa: http://liveworkspace.org/code/a9c412a7e683439dfa35a9363749369dSzablon build błąd: niezdefiniowane symbole dla architektury x86_64:
Ale gdy próbuję skompilować to wymyślona 3 plików
linii stack.h 4 do 21
linii stack.cpp 24 do 48
linii main.cpp 49 do końca
Kiedy próbuję skompilować te 3 pliki dostaję
Undefined symbols for architecture x86_64:
"Stack2<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::push(Node**, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from:
_main in ccCoizCT.o
"Stack2<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::top(Node*&)", referenced from:
_main in ccCoizCT.o
"Stack2<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::pop(Node*&)", referenced from:
_main in ccCoizCT.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Tak mam włączone stack.h w ciągu stack.cpp i main.cpp plików
Wasze ciała funkcji szablonu muszą być w całości w plikach nagłówkowych. Jeśli przycinałeś je używając wspomnianych linii, masz szablony <> ciał w plikach .cpp, muszą one być dostępne dla kompilatora do wykonania dedukcji, a zatem muszą być w pliku nagłówkowym. – WhozCraig
, które linie należy wstawić do pliku nagłówkowego? –
Sądząc po kodzie, nie powinieneś * potrzebować * pliku stack.cpp, jeśli to pomaga. Przenieś wszystkie implementacje szablonów stosu do swojego nagłówka. – WhozCraig