Sto cercando di usare una classe template e quando ho compilare in un unico file in LWS funziona: http://liveworkspace.org/code/a9c412a7e683439dfa35a9363749369dTemplate errore di generazione: i simboli non definiti per l'architettura x86_64:
Ma quando provo a compilare ha fatto-up di 3 file,
linee stack.h 4 a 21
linee stack.cpp 24 a 48
linee mAIN.CPP 49 per terminare
Quando provo a compilare quei 3 file che ricevo
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
stack.h Sì ho incluso in un file stack.cpp e Main.cpp
I vostri corpi funzione template devono essere tutti nei file di intestazione. Se li hai ritagliati usando le linee che hai menzionato, hai i corpi <> del modello in file .cpp, devono essere disponibili affinché il compilatore esegua la deduzione, e quindi devono essere nel file di intestazione. – WhozCraig
quindi quali linee devo inserire nel file di intestazione? –
A giudicare dal tuo codice, non dovresti nemmeno * avere * un file stack.cpp, se questo ti aiuta. Sposta tutte le implementazioni dei modelli di stack nella tua intestazione. – WhozCraig