URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7675
[ Назад ]

Исходное сообщение
"Явное использование дочернего класса в родительском"

Отправлено Udzhen , 29-Окт-08 09:16 
Привет всем!
Возникла проблема. Проиллюстрирую ее на следующем примере:

class Base
{
public:
    Base() {}
    virtual ~Base() {}

private:
    Child m_p;
};

class Child : public Base
{
public:
    Child() {}
    virtual ~Child() {}
};

Сборка обламывается со следующим сообщением об ошибке: ‘Child’ does not name a type
Т.е. при явном использовании дочернего класса в родительском, компилятор требует объявления класса "Child" перед классом "Base", что в принципе и логично! Но класс "Child" является дочерним классом класса "Base", что в свою очередь требует объявления класса "Base" перед классом "Child"!
Предобъявление класса "Child" (class Child;) перед "Base" естественно не является решением, т.к. использование класса "Child" явное. Получается какая то рекурсия...
В принципе, я немного изменил архитектуру проекта избавившись от данной иерархии наследования, но возникшая проблема не дает мне покоя...
У кого какие будут предложения по решению этого вопроса? Или данная проблема фундаментальна?

Компилятор g++ (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3)


Содержание

Сообщения в этом обсуждении
"во всём виноват великий ленин"
Отправлено Andrey Mitrofanov , 29-Окт-08 09:25 
>У кого какие будут предложения по решению этого вопроса?

Наймите програмиста.

>Или данная проблема фундаментальна?

Да. Проблема "создадим себе трудности, чтобы их героически преодолевать" фундаментальна и не решаема в рамках любого языка програмирования.


"Явное использование дочернего класса в родительском"
Отправлено phpcoder , 29-Окт-08 09:46 
>У кого какие будут предложения по решению этого вопроса?

Так лучше не делать. Если очень надо, то:
- перед определением класса Base добавить class Child;
- в классе Basе хранить не экземпляр класса Child, а указатель (или ссылку) на него (сооствественно понадобится конструктор, деструктор, конструктор копий и оператор присваивания определять)


"Явное использование дочернего класса в родительском"
Отправлено Keeper , 29-Окт-08 19:49 
Данный подход -- "Явное использование дочернего класса в родительском" -- явно противоречит идеологии объектно-ориентированного программирования и является ошибкой проектирования. Не делайте так. Нигде и никогда.

"Явное использование дочернего класса в родительском"
Отправлено Аноним , 30-Окт-08 02:03 
>Данный подход -- "Явное использование дочернего класса в родительском" -- явно противоречит
>идеологии объектно-ориентированного программирования и является ошибкой проектирования. Не делайте так. Нигде
>и никогда.

Это ошибка здравого смысла. Обьект содержит сам себя. А тот ещё себя. ПОлучается бесконечная матрёшка )))