|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.10.2013, 11:35 | #11 |
Пользователь
Регистрация: 07.07.2009
Сообщений: 37
|
Уважаемые читатели этого форума. Пишу для тех, кто столкнется с той же проблемой. Все оказалось гораздо сложнее, чем казалось. Перестановка местами файлов - не решение проблемы.
По описанию языка С++ во многих книгах в случае, если вы хотите отделить объявление шаблона от его определения нужно применять ключевое слово export. Однако, на практике эту возможность поддерживает очень малое количество компиляторов. В частности, компилятор mingw эту возможность не поддерживает. Все программисты, которые сталкивались с шаблонами на практике, а не в теории рекомендуют одно и то же: "при написании шаблона класса его реализация должна помешаться в заголовочном файле или встраиваемом файле, который подключается заголовочным" Обсуждение проблемы на другом форуме Книга "Сборник рецептов по С++", смотреть главу 8.11. Последний раз редактировалось valeologiya; 29.10.2013 в 11:35. Причина: выделение жирным главного |
29.10.2013, 16:06 | #12 | |||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Цитата:
Цитата:
Цитата:
Есть еще один способ - явное инстанцирование. Используется для уменьшения времени компиляции, поскольку при нем уменьшается общее кол-во инстанцирований. Все явные инстанцирования обычно помещаются в отдельную библиотеку. Но в связи с усложнением поддержки кода, этот способ применяется куда реже. |
|||
30.10.2013, 00:00 | #13 |
Пользователь
Регистрация: 07.07.2009
Сообщений: 37
|
still_alive, я бы обязательно догадался, если бы знал как работает компилятор. Для меня кажется вполне логичным, что если я скормил определение класса компилятору перед его использованием, то он уж как-нибудь сам разберется как это скомпилировать. Посоветуй, пожалуйста, литературу. Чтобы там слова "единица трансляции" тоже присутствовали.
В случае с явным инстанцированием два вопроса: 1) если используется модель компиляции с разделением, означает ли это что я смогу применить шаблон только для типов ( или значений шаблонной переменной), которые прошли явное инстанцирование? А если подставлю в шаблон другой тип, напорюсь на те же грабли. 2) как вообще собираются библиотеки шаблонов? Допустим, std::vector, я же могу в него любой тип подставить. И что, значит в заголовочном файле <vector> содержится весь код вектора? И каждый раз собирается? Тогда, мама дорогая, я пересмотрю свои взгляды на использование контейнеров. Это поражает мое воображение. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с шаблонами. Программа не компилирует. | Даша1046 | Помощь студентам | 2 | 03.07.2013 19:53 |
Ошибка компиляции | Selean | Общие вопросы C/C++ | 2 | 26.03.2013 08:18 |
Ошибка работы программы. Работа с библиотекой STL и шаблонами. С ++ | Vasyl'eva | Помощь студентам | 1 | 25.12.2011 18:39 |
Программа для отправки писем (ошибка компиляции) | Ёжик в тумане | Работа с сетью в Delphi | 2 | 22.10.2011 12:58 |
C++ ошибка компиляции | Seil_29 | Помощь студентам | 9 | 20.12.2009 22:23 |