5
我试图用一个模板类,当我在LWS编译一个文件时,它的工作原理: http://liveworkspace.org/code/a9c412a7e683439dfa35a9363749369d模板生成错误:为建筑x86_64的未定义符号:
但是当我尝试编译它编造的3个文件,
stack.h线4至21
stack.cpp线24至48
的main.cpp线49结束
当我尝试编译的3个文件,我得到
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.cpp和main.cpp的文件
你的模板函数体需要将所有在你的头文件。如果你使用你提到的那些行来修改它们,你在.cpp文件中有模板<>体,它们必须可供编译器执行演绎,因此必须在头文件中。 – WhozCraig
这样我应该插入到头文件哪些行? –
根据你的代码判断,如果有帮助,你甚至不需要*一个stack.cpp文件。将所有堆栈模板实现移至您的标题。 – WhozCraig