1

I have two classes, A and B, which depend on each other:

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

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

This code will not compile because there is a circular dependency chain. However there is still an error even if I forward-declare the class B to resolve the circular dependency:

.code.tio.cpp:7:11: error: allocation of incomplete type 'B'
                b = new B();
                        ^

I believe this error is stating that I cannot initialize B because it is a forward-declared class, but I still need A and B to depend on each other, so how do I resolve this error?

Nirvana
  • 405
  • 3
  • 15

1 Answers1

3

To resolve the problem, move the body of the A() constructor to somewhere after where the full B class is defined, like this:

class B;

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

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

A :: A() {
   b = new B();
}
Jeremy Friesner
  • 70,199
  • 15
  • 131
  • 234