![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Kolia |
|
||||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 132 Регистрация: 11.7.2003 Где: Вильнюс Репутация: нет Всего: нет |
Народ, есть проблема. Вот есть два класса. Каждый из них имеет переменную член другого класса. Только вот сие дело не хочет компилироваться. Как тут быть.
a.h
b.h
Какие идеи??? --------------------
Риспект |
||||
|
|||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Так нельзя. Используй в качестве члена класса указатель на объект другого класса, а не непосредственно объект.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Kolia |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 132 Регистрация: 11.7.2003 Где: Вильнюс Репутация: нет Всего: нет |
И как это решает проблему? error C2027: use of undefined type '...' --------------------
Риспект |
|||
|
||||
| srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Замечательно это решает проблему
a.h
b.h
Реализацию всех методов класса А, которым требуется доступ к членам класса B, выносишь в CPP-файл (а не определяешь их прямо в заголовке), в котором включаешь оба заголовочных файла. Для класса B - аналогично. -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
В даннм случае #pragma once лучше заменить на более классический вариант
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| Kolia |
|
||||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 132 Регистрация: 11.7.2003 Где: Вильнюс Репутация: нет Всего: нет |
По ходу заработало
Спасибо. Добавлено @ 20:47
Мне просто интересно, а чем данная запись лучше? Та покороче. Сам так писал, но вот на #pragma once перешел --------------------
Риспект |
||||
|
|||||
| Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
Kolia
#pragma once эта директива действует только для майкрософтовских компилеров, так что если не планируешь менять компилятор, то можешь ничего не изменять -------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
#ifdef/#endif будут однозначно поняты всеми компиляторами, в то время как #pragma once - вещь нестандартная и не всеми компиляторами понимается, а может и пониматься по разному (например, в MSVC++ 6.0 #pragma once не работает, если в одном месте заголовок включается как #include "aa.h", а в другом - #include "../hdr/aa.h" и т.п.). Но при этом второй способ может уменьшить скорость компиляции, т.к. если транслятор найдёт #ifdef, ему всё равно надо пропарсить весь заголовок, чтобы добраться до последнего #endif, в то время как с #pragma once транслятор может немедленно завершить работу с заголовком.
-------------------- Не смей читать мою подпись!!! |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Резюме: используем оба способа одновременно |
|||
|
||||
| Kolia |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 132 Регистрация: 11.7.2003 Где: Вильнюс Репутация: нет Всего: нет |
Ясна --------------------
Риспект |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |