| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > LNK2001: unresolved external symbol |
| Автор: iSpite 13.5.2010, 22:31 | ||||||
есть файл 001.cpp
в rectangle.cpp
в rectangle.h
описал класс было всё ОК. при попытке описать шаблон выдал ошибку линковки подскажите как исправить. |
| Автор: Alexeis 13.5.2010, 22:35 |
| Шаблоны в заголовочных файлах описывать нужно. Нету пока что настолько умных компиляторов С++, что скомпилить всего одну реализацию и потом инстанциировать по бинарнику. Компилятор хочет видеть всю реализацию в заголовке. Возможно со временем компиляторы поумнеют и справятся с этой задачей. |
| Автор: toxx 13.5.2010, 22:37 |
| unresolved external symbol означает, что нигде линковщик не может найти определение чего-либо(функции, метода). |
| Автор: iSpite 13.5.2010, 22:44 | ||
так что добавить в заголовок??? как описать? |
| Автор: djamshud 13.5.2010, 22:58 |
| iSpite, все писать в хедере. Или сделать в нем include"rectagle.cpp". Второй вариант иногда используется, но лично я его не люблю. |
| Автор: Alexeis 13.5.2010, 23:00 |
Все что есть цппшнике закинуть в заголовочный файл где описан шаблон. Компилятору чтобы все разрулить нужен полный исходник. цпп файл дает обж, который можно только слинковать. Линкер не умеет линковать реализацию шаблона, поэтому это должен делать компилятор. Компилятор должен на каждый цппшник где используется шаблон сгенерить свою реализацию по коду из заголовка. Потом линкер объединить одинаковые реализации, но это уже не имеет отношения к вопросу |
| Автор: iSpite 13.5.2010, 23:08 | ||
не годиться =( C1076: compiler limit : internal heap limit reached пишет что в бесконечную рекурсию уходит писать всё в хэдере нельзя условие л\р |
| Автор: Alexeis 13.5.2010, 23:13 |
| Тогда опиши тайпдефами всевозможные подстановки типов. Весь код не нужно переносить в заголовки. Нужно переносить только реализацию шаблонов. Код использующий шаблоны может быть где угодно. |
| Автор: djamshud 13.5.2010, 23:19 | ||||
iSpite, почитате про препроцессор.
|