![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| KQT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 17.10.2007 Репутация: нет Всего: нет |
Добрый вечер. К делу! Есть 4 файла: a.cpp, a.h, b.cpp, b.h. В b.h описан шаблон класса
(пара переменных, переписан стандартный конструктор и добавлен новый..), в b.cpp - он реализован. "Библиотека" b.h подключена к a.h, a.h подключена к a.cpp - просто как пара. В a.cpp создаю объект класса: class_name<int> obj_name; - при компиле имею undefined reference to `class_name<int>::class_name()'. Почему?.. |
|||
|
||||
| wils0n |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 15.2.2006 Репутация: нет Всего: 1 |
попробуйте реализацию шаблонного класса из b.h произвести также в b.h и тем самым отказаться от b.cpp
грабли лежат скорее всего в шаблоне. честно говоря, я уже не помню почему, но объявление и реализацию шаблонного класса разделить как обычно нельзя. надо либо что-то дополнительно делать, либо забить. я думаю, коллеги напишут почему и как. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Шаблоны не поддерживают раздельную компиляцию... Перенеси всю реализацию, зависящую от шаблонного параметра в заголовочный файл.
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| KQT |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 17.10.2007 Репутация: нет Всего: нет |
Благодарю. Параллельно нашел на форуме http://www.gamedev.ru/code/forum/?id=33825 ...
если можно поясните, что значит "делать что-то дополнительно"? Похоже действительно придется менять компиллер или, на худой конец, тащит этот баг препу: пусть сам е... |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
это не баг. Сказано же, что для шаблонов нельзя разделять объявление и реализацию, т.е надо тебе писать все в хедере. ничего это не значит. Если компилятор не поддерживает для шаблонов разделение (а как сказано никто кроме Comeau его не поддерживает), то никакие доплнительные действия кроме #include *.cpp не помогут |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Я не был бы столь категоричен: у меня явное инстанцирование - обыкновенная практика... -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |