Этот код является незаконным в C++ и компилятор право отклонить его. Проблема в том, что если у вас есть конкретный объект типа A внутри объекта типа B и наоборот, то нет значимого определения размера любого объекта. В частности, объекты в C++ должны иметь по крайней мере один байт. Поэтому, если задан объект типа A (назовите его a
), должен быть один байт хранилища для a
, a.objB.objA
, a.objB.objA.objB.objA
и т. Д. На самом деле вам понадобится бесконечное пространство для хранения, потому что всегда есть объект, вложенный внутри внутри эти объекты!
Чтобы исправить это, вы захотите изменить это так, чтобы вы сохраняли указатели объектам типа B и A в A и B соответственно. Это разрушает цепочку, поскольку в то время как указатель A*
указывает на объект A
, сам указатель не является объектом A
и поэтому использует только четыре байта. После этого вы можете использовать форвардные объявления для объявления этих указателей. Например:
Файл: хиджры:
class B;
class A {
B* objB;
};
Файла: B.h:
class A;
class B {
A* objA;
};
Надеется, что это помогает!
благодарит за ваше объяснение. это было действительно полезно для понимания. – Kid24
@ Kid24- Рад помочь! Не забудьте принять ответ, если вы думаете, что он отвечает на ваш вопрос.:-) – templatetypedef