LINUX.ORG.RU

История изменений

Исправление 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