| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Директивы пре(и)процессора. Проблема. |
| Автор: np9mi7 22.4.2005, 11:18 | ||||
| Добрый день. Есть класс
Его метод в качестве параметра принимает ссылку на объект другого класса. Да все бы ничего, вот только это объект имеет ссылку на A
Те оба объекта имеют ссылки в обоих направлениях. Компилятор BCB 6.0 это компилировать не хочет. Можно конечно все в одном файле определить тогда проблем не будет, а как если а двух (файлах)? Как это разрешить при помощи директив препроцессора? Заранее благодарен за ответы |
| Автор: CHi 22.4.2005, 11:50 |
| Выносить реализацию из определения класса. А вообще не стоит так делать н и к о г д а. Изменяй архитектуру классов. |
| Автор: Alastis 22.4.2005, 11:52 | ||
а что если в B.h просто после инклуда объявить:
В VC++ 7.1 все компилится тогда без проблем |
| Автор: np9mi7 22.4.2005, 11:53 | ||||
|
| Автор: Alastis 22.4.2005, 12:03 | ||
честно говоря не знаю, зачем тебе вообще нужно тут что-то директивами разруливать... просто перед использованием объекта какого то класса компилятор должен знать, что он определен где то |
| Автор: pablo 22.4.2005, 14:07 | ||||
Такая техника называется "Forward Declaration", и в данном случае, она именно то, что надо. А с препроцессором получится замкнутый круг,который некому разорвать. Поетому и не компилется, на мой взгляд. |
| Автор: Fire-Plug 23.4.2005, 06:06 |
| Конечно, forward declaration позволит избежать проблем с компиляцией файлов исх. кода классов, находящихся в циклической зависимости. НО CHi прав на все 100% - циклическая зависимость классов есть признак недостаточности, а зачастую - ошибок в анализе и/или дизайне. Действительно, почему классу А требуются методы/данные класса Б и наоборот, классу Б нужно что-то из класса А? Да скорее всего потому, что некие методы/атрибуты объявлены в к-либо одном или обоих классах ошибочно, например, из-за недостатков анализа или знаний в определенной доменной области. Или же если для обоих классов требуются нечто общее, то скорее всего, требуется некая третья структура, к-рая должна реализовать это общее и предоставить общую функциональность/данные каждому из классов. Имеется достаточно способов как это сделать. |
| Автор: np9mi7 8.5.2005, 21:59 | ||
|
| Автор: chipset 9.5.2005, 00:30 |
| Насколько я понимаю, подразумеваются паттерны типа Медиатор или Адаптер. |