![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ptica |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 27.7.2004 Репутация: нет Всего: 2 |
Научите глупую птицу...
Я хочу, чтобы у меня в структуре класса А был указатель на объект класса В, и одновременно, чтобы в структуре класса В был указатель на объект класса А. Например, есть класс А - некий элементарный объект. Есть класс Б - контейнер для класса А. И теперь я хочу, чтобы каждый объект А содержал бы в себе ссылку на "родительский" контейнер. Во 2-х Турбо Сях я написал:
и вроде бы ничего. Как провернуть то же самое с классами? |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Разницы между классами и структурами в Си++ нет. Разве что вот такое сделать:
Это сообщение отредактировал(а) ManiaK - 1.6.2005, 12:34 |
|||
|
||||
| Ptica |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 27.7.2004 Репутация: нет Всего: 2 |
Спасибо! Вот до этого
я не додумался. |
|||
|
||||
| Kolia |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 132 Регистрация: 11.7.2003 Где: Вильнюс Репутация: нет Всего: нет |
А если это не структура, а класс, в методах которого используются эти самые указатели, которые сами вызывают свои методы? Тогда такая фишка не проходит. Компилятор пишет, что методы не определене. Сам класс объявлен. Но его методы нет.
Хотя у меня щас родилась мысль также объявить и методы. Пойду попробую. Только как-то дешево выглядеть будет, если пройдет. Не прошло Это сообщение отредактировал(а) Kolia - 5.6.2005, 18:41 --------------------
Риспект |
|||
|
||||
| Mayk |
|
||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Если я правильно понял вопрос, то можно так:
вначале объявляем эти методы в обоих классах как обычно потом имплементируем их как inline. Ну например так(возьмем два класса чисел: int, float, и будем конвертировать их меж собой): TypeFloat.h
TypeInt.h
conversion.h
А теперь разберемся как оно работает 1) Подключаем typefloat.h 1.1)Препроцессор определяет __tfloat_h, компилятор обрабатывает класс TypeFloat, 1.2)Препроцессор переходит в TypeInt.h, определяет __tint_h, компилятор обрабатывает класс TypeInt 1.3) Препроцессор идет в typefloat.h, но не обрабатывает его, так кае __tfloat_h уже определен 1.4) Препроцессор идет в conversion.h, так как __conv_h не определен, а __tfloat_h и __tint_h определены, то компилятор успешно обрабатывает методы, препроцессор определяет __conv_h 1.5) conversion.h заканчивается без ошибок 1.6) typeint.h заканчивается без ошибок 1.7) препроцессор входит в conversion.h из typefloat.h, но получает пинок, так как __conv_h уже определен. 1.8) typefloat.h заканчивается без ошибок 2) Если первым подключить typeint.h, то результат аналогичен. 3) Если подключить conversion.h, то он ничего не определит, так как __tfloat_h и __tint_h еще не определены. В принципе из typefloat.h можно убрать #include "typeint.h" и из typeint.h можно убрать #include "typefloat.h". Тогда где-то в основной программе потребуется два инклюда: один на typefloat.h, другой на typeint.h. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||
|
|||||||
| ManiaK |
|
||||||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Стуктура от класса в Си++ отличается только областью доступа по умолчанию; в struct - public, class - protected (если память не изменяет).
Проще говоря, тело используемой структуры или класса должно быть объявлено до первого использования его функций, переменных и пр. Шайтанить указателями можно и без объявления:
|
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |