我正在尝试使用头文件和cpp文件分离的模板代码。我为此使用显式实例化。但我仍然得到一个未定义的引用错误。
foo.h
template<typename T>
class Foo
{
public:
void f();
};
foo.cc
#include <iostream>
#include "Foo.h"
template<typename T>
void Foo<T>::f()
{
std::cout << "Foo<T>::f()\n";
}
template class Foo<int>;
main.cc
#include "foo.h"
int main()
{
Foo<int> x;
x.f();
}
编译时:
g++ main.cc -o test
/tmp/ccfHjiVJ.o: In function `main':
main.cc:(.text+0x10): undefined reference to `Foo<int>::f()'
collect2: ld returned 1 exit status
我使用的gcc版本是gcc版本4.4.7 20120313(Red Hat 4.4.7-4)(GCC)
答案 0 :(得分:2)
您忘记在编译命令中编译foo.cc
,添加foo.cc
:
g++ main.cc foo.cc -o test
^^^^^^