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

Исходное сообщение
"Cyclic Dependency если классы юзают друг друга"

Отправлено andr.ru , 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 (или объявление экземпляра класса) недоступна.

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


Содержание

Сообщения в этом обсуждении
"Cyclic Dependency если классы юзают друг друга"
Отправлено DeadMustdie1 , 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;
}


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

Never mind


"Cyclic Dependency если классы юзают друг друга"
Отправлено Michelnok , 04-Авг-10 16:39 
> надо вынести определения функций из хедеров в cpp.

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