Форум программистов, компьютерный форум CyberForum.ru

Unresolved symbol (шаблоны) - C++

Восстановить пароль Регистрация
 
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
14.05.2011, 22:06     Unresolved symbol (шаблоны) #1
есть шаблонный класс

C++
1
2
3
4
5
template <class T> class TList
{
//....
void Init();
} ;
и описание его метода

C++
1
2
3
4
template <class T> void TList<T>::Init()
{
//....
}
при попытке вызвать ее компилятор выдает
unresolved external symbol "public: void __thiscall TList<class Npc>::Init(void)"

C++
1
2
3
4
5
6
//...
 
TList<Npc> npclist;
npclist.init();
 
//...
когда шаблон функции задаешь явно то все работает (Но тогда зачем мне шаблон)

C++
1
2
3
4
void TList<Npc>::Init()
{
//....
}
подскажите что можно предпринять чтобы метод заработал?

Добавлено через 34 минуты
проблему решил, реализовав все функции в самом классе в файле .h

C++
1
2
3
4
5
6
7
8
template <class T> class TList
{
//....
void Init()
{
//....
}
} ;
может быть кто то знает все таки как вынести реализацию в .cpp
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2011, 22:06     Unresolved symbol (шаблоны)
Посмотрите здесь:

Unresolved external symbol C++
C++ unresolved external symbol, unresolved token
C++ unresolved external symbol
C++ unresolved external symbol
C++ unresolved external symbol
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
14.05.2011, 22:11     Unresolved symbol (шаблоны) #2
Цитата Сообщение от DeadRipper Посмотреть сообщение
может быть кто то знает все таки как вынести реализацию в .cpp
Если не ошибаюсь, ключевое слово export.Подробней здесь
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
14.05.2011, 22:17     Unresolved symbol (шаблоны) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
asics, export -- это , конечно, хорошо, но из грядущего стандарта его уже намерены убрать, так что это не особо-то и выход
Можно попробовать в .h файле сделать предварительное объявление шаблона в виде
C++
1
template <class T> class TList;
должно сработать, а потом уже дальше объявлять то, что нужно и выносить то, что не нужно в .cpp файл.
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
14.05.2011, 22:32  [ТС]     Unresolved symbol (шаблоны) #4
а объявлять функцию в Cpp как в первый раз?
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
14.05.2011, 22:36     Unresolved symbol (шаблоны) #5
А чем второй раз будет отличаться от первого? Только ошибкой компилятора. Да, как в первый раз.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
15.05.2011, 00:27     Unresolved symbol (шаблоны) #6
Цитата Сообщение от DeadRipper Посмотреть сообщение
может быть кто то знает все таки как вынести реализацию в .cpp
В первом примере у тебя тело функции Init было реализовано в .cpp? Так нельзя. Всё, что касается шаблона, должно быть в .h (другими словами, любая точка инстанциации шаблона должна видеть весь шаблон со всеми потрохами)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.05.2011, 00:38     Unresolved symbol (шаблоны) #7
Evg, Аха. Только gcc все .tcc файлы везде пихают, и в h подключают, если установлен дефайн на новый стандарт.

Не по теме:

А еще они codecvt темплейтный описали в h, а функций ТОЛЬКО объявления. Итого, дабы пронаследоваться от codecvt стопроцентно нужно делать специализацию собственную, если нужно что-то иное кроме как codecvt<char, char, std::mbstate_t> или codecvt<wchar_t, char, std::mbstate_t>. Извиняюсь, вырвалось.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2011, 00:51     Unresolved symbol (шаблоны)
Еще ссылки по теме:

Unresolved external symbol C++
Unresolved external symbol C++
Unresolved external symbol C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 26
15.05.2011, 00:51     Unresolved symbol (шаблоны) #8
Цитата Сообщение от ForEveR Посмотреть сообщение
Только gcc все .tcc файлы везде пихают, и в h подключают
А какая разница что и куда пихать, если необходимо обеспечить видимость всего шаблона в момент компиляции. Не всё ли равно, из какого файла это инклюдить?
Yandex
Объявления
15.05.2011, 00:51     Unresolved symbol (шаблоны)
Ответ Создать тему
Опции темы

Текущее время: 11:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru