Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обращение к методу класса из включаемого объекта
 
 автор: alex19921992   (04.12.2007 в 23:12)   письмо автору
 
 

Вопрос:
Естоь некоторый класс class1.
Он содержит в себе class2 и class3:

class class1
{
    class2 cls2;
    class3 cls3;
};

но проблема: функции класса 2 должны иметь доступ к классу 1 и 3. тогда вроде бы надо сделать в классе 2 указатель на класс 1:

class class2
{
    class1*cls1;
};

однако компилер выдает ошибку (понятно, почему) : класс 2 описан после того, как использовался в классе 1. а если поменять местами описания классов 1 и 2, то класс 2 будет иметь указатель на класс 1, который еще не описан....
Что делать?

  Ответить  
 
 автор: cheops   (05.12.2007 в 03:48)   письмо автору
 
   для: alex19921992   (04.12.2007 в 23:12)
 

Нет, надо перепроектировать объектно-ориентированную схему или проще вообще без классов обойтись... Суть объектно-ориентированного программирования заключается в том, чтобы исключить многочисленные связи между модулями, чтобы класс можно было взять из приложения и поместить в другое и он не тащил за собой море дополнительных классов. Можно конечно классы дружественными объявить, но лучше переработать объектно-ориентированную схему...

Что у вас делают классы class1, class2 и class3 и зачем включаемому классу потребовался метод класса-контейнера?

  Ответить  
 
 автор: Фитч   (05.12.2007 в 08:32)   письмо автору
 
   для: cheops   (05.12.2007 в 03:48)
 

...Или сделать предварительное объявление класса class1:

class class1; // предварительное объявление class 1

class class2
{
 class1* pClass1;
};

class class3
{
 ...
};

class class1
{
 class2 cl2;
 class3 cl3;
};

  Ответить  
 
 автор: alex19921992   (06.12.2007 в 05:40)   письмо автору
 
   для: Фитч   (05.12.2007 в 08:32)
 

Делаю игру))
Дело в том что у меня есть класс CGamePlace, в котором содержатся СMap, CScriptProgram, CCollisionArray, CPoolArray,CSkyBox,CCamera.

Так вот класс CScriptProgram должен иметь метод MakeScriptProgram. Однако Эта функция должна иметь доступ к СMap, CCollisionArray, CPoolArray,CSkyBox,CCamera.
То есть скрипт управляет игрой.
Я пока сделал Ф-ю MakeScriptProgram в CGamePlace, что, согласитесь нелогично... А когда CScriptProgram имеет указатель на CGamePlace - эта проблема решается.
Спасибо, буду делать предварительное объявление класса.

ЗЫ: менять модель ООП не могу, ибо написал уже много кода, а другой модели ООП не знаю - там игра-то почти вся без ООП, там используется функция классов обрабатывать самих себя как объекты. Ни наследования, ничего подобного нет, все элементы класса - public везде и всюду. Получилось из этого такое чудо: [url]www.w-engine.narod.ru/demoengine.rar[/url]

  Ответить  
 
 автор: cheops   (06.12.2007 в 11:33)   письмо автору
 
   для: alex19921992   (06.12.2007 в 05:40)
 

В крайнем случае объявите классы СMap, CCollisionArray, CPoolArray,CSkyBox,CCamera дружественными классу CScriptProgram

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования