![]() |
|
Модераторы: bsa |
![]()
|
|
| Burka |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
Подскажите как решить такую проблему: у меня много мелких классов, которые могут использовать друг друга. Как правильно организовать хедеры что бы не возникало проблем при компиляции, с расчетом на будущие добавляния новых классов.
Вот так у меня сейчас, и возникает ошибка типа
Action.h
Object.h
MegaObject.h
shared.h
Это сообщение отредактировал(а) Burka - 19.6.2012, 00:32 -------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
||||||||||
|
|||||||||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
||||
|
||||
| Burka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
#pragma once мне не помогает
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
|||
|
||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
тогда напиши нормальный код
то что ты выложил (без include guard'ов и pragma once) точно работать не может |
|||
|
||||
| Burka |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
Нормальный код я как раз хотел увидеть) потому что у меня не работает никак)
Action.h
Object.h
MegaObject.h
shared.h
Это сообщение отредактировал(а) Burka - 19.6.2012, 01:13 -------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
||||||||
|
|||||||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
Burka, ; после class { }; стоят?
|
|||
|
||||
| Burka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
Поправил в примере, вообще да везде стоят, перепроверил. У меня вообще больше классов, я хотел увидеть пример какой-нибудь работающий с множеством инклудов перекрестных. Я просто чего то не допонимаю и из за этой мелочи не могу сделать
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
|||
|
||||
| alexvs11 |
|
||||||||||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
Это сообщение отредактировал(а) alexvs11 - 19.6.2012, 01:24 |
||||||||||
|
|||||||||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
не ругается на отсутствие конструкторов класса ?
тот же Builder проигнорирует отсутствие конструктора и создаст его сам по умолчанию. -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Очень вероятно что объекты у вас ссылаются друг на друга в виде полей. Такое поведение не запрещено, но только если поля являются указателями и присутствует опережающее описание объекта. Кроме того такая циклическая ссылочность серьезно ограничит возможности по написанию кода в заголовках. Некоторые послабления есть для шаблонов, ввиду того, что синтаксис шаблонного класса проверяется там где инстанциируется, а не сразу по включению.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Burka |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
че то ничего у меня не получается, все равно ругается. вот такая структура.
Action.h
Object.h
Place.h
Human.h
World.h
Shared.h
как я это ни вертел ничего не выходит. пробовал форвард оставлять и не включать хедеры там где можно, все равно не получается. к концу получается что какой то класс не объявлен -------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
||||||||||||
|
|||||||||||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
в Shared.h сделай объявление
теперь как бы единица компиляции у которой подключен хеадер Shared.h будет видеть что мол объявлен такой то класс. А уже на этапе линковки все это будет соединяться вместе. Это сообщение отредактировал(а) Dem_max - 20.6.2012, 06:13 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Burka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
а #pragma once разве не тоже самое делает?
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
#pragma once понимают не все компиляторы, а #ifndef - #define - #endif все.
Но лучше писать код так, чтобы ни #pragma once, ни #ifndef - #define - #endif были не обазательны, а были только доп. страховкой:
+ добавь для страховки #pragma once и/или #ifndef - #define - #endif в остальных файлах, но всё будет работать без них |
|||
|
||||
| Burka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.5.2007 Репутация: нет Всего: 2 |
Спасибо больше, понял наконец то в чем дело)
-------------------- Великие умы обсуждают идеи; средние умы обсуждают события; мелкие умы обсуждают людей. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |