Объявление шаблонной функции
От: 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;
}


Дело видимо в шаблоне. Подскажите, в чем причина различного поведения.
Спасибо.
Re: Объявление шаблонной функции
От: nrgbi  
Дата: 11.07.07 12:26
Оценка: 2 (1) :)
Хмм.. Действительно часто встречается
Читай http://rsdn.ru/forum/message/2580711.1.aspx
Автор: Lorenzo_LAMAS
Дата: 11.07.07
Re[2]: Объявление шаблонной функции
От: Rothmans  
Дата: 11.07.07 13:10
Оценка:
Здравствуйте, 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 все описано
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.