У меня проблема с компиляцией с круговыми зависимостями. Я сделал некоторые исследования, и люди рекомендовали использовать форвардную декларацию. У меня все еще есть проблема с этим, потому что класс, который имеет объявление вперед, использует методы из перенаправленного класса. Это заставляет компилятор дать мне ошибку «Класс A имеет неполное поле b». Как я могу обойти круговую зависимость, где A требует B, а B - A?Убивание круговой зависимости
хиджры:
#ifndef A_H_
#define A_H_
#include <iostream>
//#include "B.h"
class A
{
class B;
private:
B b;
public:
A();
~A();
void method();
};
#endif
a.cpp:
#include <iostream>
#include "A.h"
A::A()
{
}
A::~A()
{
}
void A::method()
{
b.method();
}
B.h:
#ifndef B_H_
#define B_H_
#include <iostream>
//#include "A.h"
class B
{
class A;
private:
A a;
public:
B();
~B();
void method();
};
#endif
B.cpp:
#include <iostream>
#include "B.h"
B::B()
{
}
B::~B()
{
}
void B::method()
{
a.method();
}
Таким образом, объект 'A' содержит' B', который содержит 'A', который содержит' B', который содержит 'A', который содержит' B' ... – crashmstr
Вы не можете имеют 'A' внутри' B' и 'B' внутри' A'. Вы можете сделать указатель на A внутри B или указатель на B внутри A – balki