Объявление шаблонной функции
От: Rothmans  
Дата: 11.07.07 12:10
Оценка:
Привет всем,

Есть три файла:

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;
}


Дело видимо в шаблоне. Подскажите, в чем причина различного поведения.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.