Cyclic dependencies (C++)

Issue
The cyclic dependency is a problem which occurs if two classes includes each other in their header.

#pragma once
#include "egg.hpp"

class Hen {
    Egg egg;
};
#include "hen.hpp"

// ...
#pragma once
#include "hen.hpp"

class Egg {
    Hen hen;
};
#include "egg.hpp"

// ...
hen.hpp <---> egg.hpp
   ↑             ↑
   |             |
   |             |
hen.cpp       egg.cpp

Solution
You can fix it if you just declare the other class in the header and include them later in the source file.

#pragma once
class Egg;

class Hen {
    Egg egg;
};
#include "hen.hpp"
#include "egg.hpp"

// ...
#pragma once
class Hen;

class Egg {
    Hen hen;
};
#include "egg.hpp"
#include "hen.hpp"

// ...
hen.hpp       egg.hpp
   ↑    ↖   ↗    ↑
   |      ⤬      |
   |    /   \    |
hen.cpp       egg.cpp