LINUX.ORG.RU

классы, объекты и указатели на них


0

0

пожалуйста помогите разобраться в следующей ситуации (сразу хочу предупредить, что пример урезал и постарался оставить только то, что имеет значение):

есть два класса, пусть в каждом из них имеется по одному члену - указателю на объект "противоположного" класса (то есть другого класса):

class A {
  B* b;
};

class B {
  A* a;
};

чтобы не было недоразумений, необходимо перед определением класса A поместить объявление класса B:

class B;

class A {
  B* b;
};

class B {
  A* a;
};

теперь добавляем в классконструкторы:

class B;

class A {
  B* b;
  public:
  A(B* btmp = 0) {
    b = btmp;
  }
};

class B {
  A* a;
  public:
  B(A* atmp = 0) {
    a = atmp;
  }
};

пока проблем нет...

но как видим, мы в констукторе копируем только указатели... и если только я пытаюсь написать следующее:

A(B btmp = 0) {
  b = new B(btmp);
}

то тут уже объявления в начале класса B не хватает, и компилятор возникает: undefined structure B...

как разрешить эту коллизию?
anonymous

class B;

class A {
  B* b;
public:
  A(B* btmp = 0);
};

class B {
  A* a;
public:
  B(A* atmp = 0);
};

inline A::A(B *btmp) 
{
   ...
}

inline B::B(A *atmp)
{
   ...
}

anonymous
()
Ответ на: комментарий от anonymous

а что привносит спецификатор inline?
типа мы рекомендуем компилятору втсроить эти функции в тело класса?
но какой от этого результат?
и что будет, если мы не напишем этого?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.