![]() |
|
Модераторы: bsa |
![]()
|
|
| Hassel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Пусть есть два класса, A и B. У каждого есть заголовочный файл и файл реализации. Оба класса циклически связаны друг с другом:
Заголовочный файл a.h
Заголовочный файл b.h
Подобный код у меня не компилируется (получаю сообщение про incomplete type A и forward declaration of struct A). Если не сложно, обясните ошибку. |
||||
|
|||||
| volatile |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Если только то, что вы написали, то проблему должна решить небольшая перетасовка:
Заголовочный файл a.h
Заголовочный файл b.h
|
||||
|
|||||
| Hassel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Спасибо, volatile.
Сейчас попробую сформулировать: 1) "... функция-друг класса должна быть либо явно объявлена в охватывающей области видимости, либо иметь аргументы этого класса...". Страуструп, Язык программирования C++, 11.5.1 Поиск друзей 2) В момент, когда компилируется класс B, класс A объявлен, но методы класса A не объявлены, следовательно, имеет место нарушение п.1 А вот что значит: "...функция-друг класса должна быть либо ... либо иметь аргументы этого класса...", до меня пока как-то не доходит Это сообщение отредактировал(а) Hassel - 30.6.2011, 11:16 |
|||
|
||||
| volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
Когда компилируется B, класс А (и естественно все его методы), уже объявлены, так как мы включили #include "a.h" Так что никакого нарушения нет. |
|||
|
||||
| Hassel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 13.1.2011 Где: Москва Репутация: нет Всего: нет |
Да, правильно, я просто для себя хотел сформулировать, почему возникала ошибка. Еще раз спасибо за помощь.
Это сообщение отредактировал(а) Hassel - 1.7.2011, 12:40 |
|||
|
||||
![]()
|
| Правила форума "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. |