|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.08.2016, 11:36 | #1 |
Пользователь
Регистрация: 08.06.2016
Сообщений: 11
|
Область видимости класса
Всем здравствуйте!
Такая проблема: Есть два класса: A и B, они оба включаются с помощью #include и должны друг друга видеть. Выглядит класс A так: Код:
Код:
Код:
PS: Насколько я знаю, существуют прототипы классов C++, однако используя их нельзя обращаться к членам класса. Последний раз редактировалось kintel; 10.08.2016 в 11:40. |
10.08.2016, 11:41 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,759
|
Не знаю, что вы имели в виду под прототипами классов, но если https://en.wikipedia.org/wiki/Forward_declaration, то последняя часть вашего PS бред и это то, что нужно.
|
10.08.2016, 11:48 | #3 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
А не проще RoleEnum сделать отдельно от А?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
10.08.2016, 12:06 | #4 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Код:
Код:
Последний раз редактировалось Croessmah; 10.08.2016 в 12:08. |
10.08.2016, 13:27 | #5 |
Пользователь
Регистрация: 08.06.2016
Сообщений: 11
|
p51x, я в нескольких источниках встречал, что нельзя использовать члены не определённого класса. Нельзя даже создавать экземпляр такого класса. Можно только указатель на него, так как указатели имеют фиксированный размер памяти. Из вики про невозможность обращения к методам неопределённого класса:
"Forward declaration of a class is not sufficient if you need to use the actual class type, for example, if you have a member whose type is that class directly (not a pointer), or if you need to use it as a base class, or if you need to use the methods of the class in a method." (https://en.wikipedia.org/wiki/Forwar...ration#Classes) В моём случае также выдаётся ошибка: "incomplete type is not allowed" Последний раз редактировалось kintel; 10.08.2016 в 13:51. |
10.08.2016, 13:45 | #6 |
Пользователь
Регистрация: 08.06.2016
Сообщений: 11
|
Croessmah, чтобы это сработало, обязательно нужно разделять класс на интерфейс и реализацию в двух разных файлах? Просто в моём случае я определяю каждый класс в собственном h-файле. И сейчас всё изменять было бы проблематично. А если в моём случае использовать прототип, выдаются ошибки:
1) argument of type "A::RoleEnum" is incompatible with parameter of type "A::RoleEnum" 2) C2027 use of undefined type 'B' 3) C2227 left of '->func' must point to class/struct/union/generic type (Все ошибки по отношению к файлу A.h) |
10.08.2016, 13:49 | #7 |
Пользователь
Регистрация: 08.06.2016
Сообщений: 11
|
Alex11223, проще, конечно. И вообще альтернативные решения этой проблемы есть. Но в конкретном случае мне важно понять как разрешить проблему "связки" и корректной работы двух классов друг с другом. Наверняка в с++ есть решение.
|
10.08.2016, 13:56 | #8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,759
|
Приведите минимальный нерабочий проект
|
10.08.2016, 14:32 | #9 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Область видимости | chertovich | Общие вопросы Delphi | 10 | 24.09.2011 03:21 |
Область видимости членов класса. | Lord-of-Hedgehogs | Общие вопросы C/C++ | 9 | 27.11.2010 21:29 |
Публичная область видимости | Бутаков_Сергей | Общие вопросы Delphi | 1 | 20.04.2010 09:02 |
область видимости | Dimarik | Общие вопросы .NET | 5 | 21.02.2010 21:32 |
область видимости ? | artem779 | Общие вопросы Delphi | 3 | 14.09.2007 09:34 |