Исправление ymuv, (текущая версия) :
#ifndef FOO_H
#define FOO_H
template<typename T>
void foo(T val)
{
int a=5;
}
#endif // FOO_H
И без A.cpp
Причина: компилятор компилирует все cpp файлы. Для него символ функции это закодированный класс, неймспейс, темплейт... После компиляции main.cpp захочет функцию что-то вроде foo_int (как она будет правильно называться можно посмотреть с помощью int), но линкеровщик эту функцию не находит.
Исправление ymuv, :
#ifndef FOO_H
#define FOO_H
template<typename T>
void foo(T val)
{
int a=5;
}
#endif // FOO_H
И без A.cpp
Причина: компилятор компилирует все cpp файлы. Для него символ функции это закодированный класс, неймспейс, темплейт. После компиляции main.cpp захочет функцию что-то вроде foo_int (как она будет правильно называться можно посмотреть с помощью int), но линкеровщик эту функцию не находит.
Исходная версия ymuv, :
#ifndef FOO_H
#define FOO_H
template<typename T>
void foo(T val)
{
int a=5;
}
#endif // FOO_H