The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Cyclic Dependency если классы юзают друг друга"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Cyclic Dependency если классы юзают друг друга"  +/
Сообщение от andr.ru email on 04-Авг-10, 11:10 
есть ли способ объявить это не только для указателей? Напр.

//A.h
#include "B.h"
class A {
private: B* ptr;
public: void func () { ptr = new B(); }
};

//B.h
#include "A.h"
class B {
private: A* ptr;
public: void func () { ptr = new A(); }
};


Forward declaration позволяет работать только с указателями, а операция new (или объявление экземпляра класса) недоступна.

Есть ли решение?

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Cyclic Dependency если классы юзают друг друга"  +/
Сообщение от DeadMustdie1 email(ok) on 04-Авг-10, 11:29 

Всё в одном файле:


class B;

class A {
private:
  const B& b;

public:
  A();
  B* func();
};

class B {
private:
  A* pa;

public:
  B();
  void func();
};

inline A::A()
  : b(B())
{}

inline B* A::func()
{
  return new B();
}

inline B::B()
  : pa(0)
{}

inline void B::func()
{
  if ( pa==0 )
    pa = new A();
}


int main()
{
  A a;
  B b;
  return 0;
}

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Cyclic Dependency если классы юзают друг друга"  +/
Сообщение от andr.ru on 04-Авг-10, 12:29 
Решение оказалось простое - надо вынести определения функций из хедеров в cpp.

Never mind

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Cyclic Dependency если классы юзают друг друга"  +/
Сообщение от Michelnok (ok) on 04-Авг-10, 16:39 
> надо вынести определения функций из хедеров в cpp.

Либо оставить в заголовке, но вынести за пределы класса, если хочется inline

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру