Имеются два файла, header.h & source.cc
header.h
Код: Выделить всё
template <class Type>
class Dummy
{
public:
Dummy() {};
~Dummy() {};
void PrintSomeValue(Type value);
};source.cc
Код: Выделить всё
#include "header.h"
template <class Type>
void Dummy<Type>::PrintSomeValue(Type value)
{
cout << value << endl;
}Если допустим метод объекта класса Dummy PrintSomeValue() вызывается с аргументом типа int или любого другого основного типа, линкер выдает ошибку типа
Код: Выделить всё
undefined reference to "void Dummy<int>::PrintSomeValue(int)Все работает хорошо если и интерфейс класса и его реализация написаны в одном файле. Собираю таким образом:
Код: Выделить всё
g++ source.cc -c -o build/source.o $(CFLAGS)
g++ main.cc -c -o build/main.o $(CFLAGS)
g++ build/source.o build/main.o $(LIBS)Содержимое main.cc довольно таки банальное, так что не стану приводить. Там просто создается объект Dummy<int> и вызывается функция PrintSomeValue(int).