Привет всем,
Есть три файла:
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;
}
Дело видимо в шаблоне. Подскажите, в чем причина различного поведения.
Спасибо.
Здравствуйте, nrgbi, Вы писали:
N>Хмм.. Действительно часто встречается
N>Читай http://rsdn.ru/forum/message/2580711.1.aspxАвтор: Lorenzo_LAMAS
Дата: 11.07.07
О!

Пркольно.
export с моим компилятором похоже не канает (warning: keyword `export' not implemented, and will be ignored)

Мораль понял, довольствуюсь реализацией в заголовке.
PS: Действительно, в §13.7 все описано