这对我来说非常神秘。我在 ubuntu 上使用 g++,这是我的一些代码(类名发生了变化,但没有别的,因为我仍在到处使用存根):
鲍勃.hpp
template <class A>
class Bob : public Jack<Chris, A>
{
public:
Bob(int x1, int x2, float x3 = 1.0, float x4 = 2.0, float x5 = 3.0) throw(Exception);
virtual ~Bob();
};
我在另一个文件中实现了这样的:
鲍勃.cpp
template <class A>
Bob<A>::Bob(int x1, int x2, float x3, float x4, float x5) throw(Exception)
{
}
template <class A>
Bob<A>::~Bob()
{
}
我像这样使用它:
主文件
int main()
{
Bob<Alice> instance(1, 2);
}
编译:
g++ -c Bob.cpp -o Bob.o
g++ -c main.cpp -o main.o
g++ -L"libs" -llib main.o Bob.o prog
给我 main.o: 在函数main':
main.cpp:(.text+0x1fd): undefined reference to
Bob::Bob(int, int, float, float, float)' collect2: ld 返回 1 退出状态
我完全被难住了。使用 g++ 链接阶段更改顺序没有区别。编译目标文件不会产生任何问题。当我实现构造函数时为什么会出现未定义的引用?如果有人能对此有所了解,将不胜感激。