powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / template link error
6 сообщений из 6, страница 1 из 1
template link error
    #32595239
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Privet All,
porblema kogda linkuiu template class, vot source:
//test.h
#ifndef __UTIL_TABLE_H_
#define __UTIL_TABLE_H_
template <class T>
class Table
{
int dim;
T *table;
public:
Table(int _dim);
};
#endif //__UTIL_TABLE_H_

//test.cpp
#include "test.h"
template<class T>
Table<T>::Table(int _dim):dim(_dim)
{
table= new T[dim];
}

//test_work.cpp
#include "util_table.h"
void main(void)
{
Table<int> t(10);
}

kogda probuiu sdelati build to poluciaiu sleduiusciuiu osibku:

error LNK2019: unresolved external symbol "public: __thiscall Table<int>::Table<int>(int)" (??0?$Table@H@@QAE@H@Z) referenced in function _main

Ia znaiu cito vse resaetsea esli cod is faila test.cpp perekinuti v test.h, no poluciaetsea nekrasivii kod, mojno kakto zastaviti compiliator pravelino rabotati ?

da, compiliator VC7.
...
Рейтинг: 0 / 0
template link error
    #32595302
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помести реализацию шаблона в заголовочный файл - его тело требуется при инстанцировании твоего шаблона класса. Чтобы понять в чем дело, представь что шаблон это макрос - а как компилятору выполнить подстановку макроса, если его определение отсутствует в точке подстановки (в точке инстанцирования, по отношению к шаблонам).
...
Рейтинг: 0 / 0
template link error
    #32596131
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы чего, какой компилятор? Ошибка-то линковки.

Используй explicit instantiation. В test.cpp напиши
Код: plaintext
template class Table<int>;
...
Рейтинг: 0 / 0
template link error
    #32596277
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВы чего, какой компилятор? Ошибка-то линковки.

Ошибка линковки из-за того, что компилятор при инстанцировании Table<int> не сгенерил для Table<int> тела соответсвующих методов вызываемых клиентом, потому что их определения (методов) не было под рукой компилятора в точке инстанцирования.

авторИспользуй explicit instantiation. В test.cpp напиши
template class Table<int>;


Не надо предлагать откровенные гл... Если я захочу в своем коде использовать экземпляр Test<std::string>, то что, Вы мне предложите найти исходный код библиотеки (test.cpp) и поместить помимо уже имеющейся tеmplate class Table<int> еще и tеmplate class Table<std::string>? Я не согласен. Я уже не говорю о том, что явное истанцирование приводит к генерации всех методов шаблона, а не тех, которые действительно требуются клиенту - это надо кому-нибудь?
...
Рейтинг: 0 / 0
template link error
    #32597995
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой ВэйВы чего, какой компилятор? Ошибка-то линковки.

Используй explicit instantiation. В test.cpp напиши
Код: plaintext
template class Table<int>;


a zacem mne v test.cpp priviazivatsea k int, mne je nujen obscii template,
mala li mne potom ponadobitsea poiuzati etot class dlia double ?!!!
...
Рейтинг: 0 / 0
template link error
    #32598004
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tak obiesnenie toliko to cito napisal Анатолий Широков ?
ia polazil po sursam VC7, oni tam vezde opredelenie vstavliaiut v header.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / template link error
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]