Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Ermass
Зарегистрирован: 23.09.2007 Сообщения: 7
|
Добавлено: Вс Сен 23 2007 18:04 Заголовок сообщения: unresolved external symbol + template |
|
|
Здравствуйте!
Столкнулся с такой проблемой:
Использую VC++ 6.0. Создаю проект: Win32 Console Application->Empty project.
В проекте создаю 3 файла:
1. main.cpp
Код: |
#include "class.h"
int main(void)
{
MyClass<int> c;
c(123);
return 0;
}
|
2. class.cpp
Код: |
#include "class.h"
template<class T>
T MyClass<T>::operator ()(T x)
{
return x;
}
|
3.class.h
Код: |
template<class T>
class MyClass
{
public:
MyClass(){}
~MyClass(){}
T operator()(T);
private:
};
|
При попытке компиляции получаю сообщение:
main.obj : error LNK2001: unresolved external symbol "public: int __thiscall MyClass<int>::operator()(int)" (??R?$MyClass@H@@QAEHH@Z)
Не могу понять в чем проблема.
Если делать то же самое но не как шаблон. Все компилируется. Если перенести все в 1 файл main.cpp тоже все компилируется нормально. |
|
Вернуться к началу |
|
|
Mytilus Galloprovincialis
Зарегистрирован: 30.08.2005 Сообщения: 358 Откуда: откуда все люди родятся
|
Добавлено: Пн Сен 24 2007 00:39 Заголовок сообщения: |
|
|
Должно работать "на ура". Из ошибки понятно, что компилятор нашел объявление метода, но не смог найти реализацию. Проверь, все ли у тебя там правильно (может, namespace какие-нить или еще что-то), и если ничего не поможет, напиши реализацию в хидере (class.h). |
|
Вернуться к началу |
|
|
Ermass
Зарегистрирован: 23.09.2007 Сообщения: 7
|
Добавлено: Вс Сен 30 2007 18:03 Заголовок сообщения: |
|
|
Я разобрался. Подобный механизм раздельной компиляции и не должен работать для шаблонов. В этом их особенность. Реализация шаблона должна быть там где и описание. Вся стандартная библиотека реализована в заголовочных файлах. Думаю тему можно считать закрытой. |
|
Вернуться к началу |
|
|
|