即使在明确的Instatantiation之后也是错误的

时间:2014-05-13 09:44:43

标签: c++ templates

我正在尝试使用头文件和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)

1 个答案:

答案 0 :(得分:2)

您忘记在编译命令中编译foo.cc,添加foo.cc

g++ main.cc foo.cc -o test
            ^^^^^^