Привет всем,
Есть три файла:
Header.h:
namespace X
{
template<class T> T myFunc(T);
}
Module1.cpp:
#include "Header.h"
using namespace X;
void SomeOtherFunc()
{
int x = 5;
x = myFunc(x);
}
Implementation.cpp:
#include "Header.h"
template<class T> T X::myFunc(T t)
{
return t;
}
Все компилируется и даже линкуется (компилятор ccmips).
При запуске программы получаю сообщение об ошибке: module xxx holds reference to undefined symbol myFunc.
Теперь если я изменяю файлы следующим образом:
Header.h:
namespace X
{
template<class T> T myFunc(T t)
{
return t;
}
}
Module1.cpp:
#include "Header.h"
using namespace X;
void SomeOtherFunc()
{
int x = 5;
x = myFunc(x);
}
Implementation.cpp:
#include "Header.h"
...
То все работает без ошибок.
Аналогичная ситуация с обычной нешаблонной фукцией проблем не вызывает даже в начальном раскладе:
Header.h:
namespace X
{
int myFunc(int);
}
Module1.cpp:
#include "Header.h"
using namespace X;
void SomeOtherFunc()
{
int x = 5;
x = myFunc(x);
}
Implementation.cpp:
#include "Header.h"
int X::myFunc(int t)
{
return t;
}
Дело видимо в шаблоне. Подскажите, в чем причина различного поведения.
Спасибо.