|
|
|
| Вопрос:
Естоь некоторый класс class1.
Он содержит в себе class2 и class3:
class class1
{
class2 cls2;
class3 cls3;
};
|
но проблема: функции класса 2 должны иметь доступ к классу 1 и 3. тогда вроде бы надо сделать в классе 2 указатель на класс 1:
class class2
{
class1*cls1;
};
|
однако компилер выдает ошибку (понятно, почему) : класс 2 описан после того, как использовался в классе 1. а если поменять местами описания классов 1 и 2, то класс 2 будет иметь указатель на класс 1, который еще не описан....
Что делать? | |
|
|
|
|
|
|
|
для: alex19921992
(04.12.2007 в 23:12)
| | Нет, надо перепроектировать объектно-ориентированную схему или проще вообще без классов обойтись... Суть объектно-ориентированного программирования заключается в том, чтобы исключить многочисленные связи между модулями, чтобы класс можно было взять из приложения и поместить в другое и он не тащил за собой море дополнительных классов. Можно конечно классы дружественными объявить, но лучше переработать объектно-ориентированную схему...
Что у вас делают классы class1, class2 и class3 и зачем включаемому классу потребовался метод класса-контейнера? | |
|
|
|
|
|
|
|
для: cheops
(05.12.2007 в 03:48)
| | ...Или сделать предварительное объявление класса class1:
class class1; // предварительное объявление class 1
class class2
{
class1* pClass1;
};
class class3
{
...
};
class class1
{
class2 cl2;
class3 cl3;
};
|
| |
|
|
|
|
|
|
|
для: Фитч
(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] | |
|
|
|
|
|
|
|
для: alex19921992
(06.12.2007 в 05:40)
| | В крайнем случае объявите классы СMap, CCollisionArray, CPoolArray,CSkyBox,CCamera дружественными классу CScriptProgram | |
|
|
|