Я получаю эту ошибку, выполняя следующие действия:
класс А; класс B;
класс A {
B b_obj; // Здесь возникает ошибка
...
}
класс B {
...
A a_объект;
...
}
Одна вещь, которую я наблюдал, это то, что если я сдвигаю класс B вверх, тогда он удаляется, но поскольку я использую двухстороннюю ссылку, которая также имеет объект класса A в B, поэтому я не могу избавиться от обеих ошибок.
Он называл проблему круговой зависимости. См. Этот отличный ответ, чтобы узнать, как его решить.
Круговая зависимость
struct A { B b; };
struct B { A a; };
никогда не будет компилироваться. Либо A не знает размер B, либо наоборот (один объявлен перед другим).
Теперь у вас может возникнуть соблазн написать (с передовыми объявлениями)
struct A { std::shared_ptr<B> b; };
struct B { std::shared_ptr<A> a; };
который будет компилировать и (может/должен) вводить утечку памяти (a относится к b и наоборот).
Следовательно, возникает вопрос: имеет ли собственный B или B собственный A - или даже другой класс C.
(Имея определенное право собственности, вы можете просто использовать new/delete вместо shared_ptr)