В C ++ T o
означает «объект типа T
, а не ссылку на некоторый T
(как, например, со ссылочными типами в C # и Java). В коде из вашего вопроса введите A
будет иметь подобъект типа B
(с именем b
), а этот B
в свою очередь будет иметь подобъект типа A
(с именем a
). Теперь этот a
будет, в свою очередь, иметь еще один A
внутри (снова называемый a
), который затем имеет еще один B
, который ...
Нет, это не будет работать.
Что вам, вероятно, нужно, это то, что A
ссылается на B
, что, в свою очередь, ссылается на A
. Это можно сделать с помощью указателей:
struct A;
struct B {
A* a;
B(A*);
};
struct A {
B* b;
A(B* b_) : b(b_) { if(b) b.a = this; }
};
B::B(A* a_) : : a(a_) { if(a) a.b = this; }
Не думаю, что это можно сделать с помощью ссылок.