|
|
|
template link error
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 12:51 |
|
||
|
template link error
|
|||
|---|---|---|---|
|
#18+
Помести реализацию шаблона в заголовочный файл - его тело требуется при инстанцировании твоего шаблона класса. Чтобы понять в чем дело, представь что шаблон это макрос - а как компилятору выполнить подстановку макроса, если его определение отсутствует в точке подстановки (в точке инстанцирования, по отношению к шаблонам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 13:12 |
|
||
|
template link error
|
|||
|---|---|---|---|
|
#18+
Вы чего, какой компилятор? Ошибка-то линковки. Используй explicit instantiation. В test.cpp напиши Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 17:40 |
|
||
|
template link error
|
|||
|---|---|---|---|
|
#18+
авторВы чего, какой компилятор? Ошибка-то линковки. Ошибка линковки из-за того, что компилятор при инстанцировании 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>? Я не согласен. Я уже не говорю о том, что явное истанцирование приводит к генерации всех методов шаблона, а не тех, которые действительно требуются клиенту - это надо кому-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2004, 18:41 |
|
||
|
template link error
|
|||
|---|---|---|---|
|
#18+
Ой ВэйВы чего, какой компилятор? Ошибка-то линковки. Используй explicit instantiation. В test.cpp напиши Код: plaintext a zacem mne v test.cpp priviazivatsea k int, mne je nujen obscii template, mala li mne potom ponadobitsea poiuzati etot class dlia double ?!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 17:11 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=439&tid=2034675]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 350ms |

| 0 / 0 |
