Question

I am trying to get a template code working with the header file and cpp file separated. I use explicit instantiation for this. But I still get an undefined reference error.

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();
}

When I compile:

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

The gcc version I use is gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)

Was it helpful?

Solution

You've forgotten to compile foo.cc in your compile command, add foo.cc:

g++ main.cc foo.cc -o test
            ^^^^^^
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top