Incomplete class declarations.

Problem: Two classes reference each other.

Figure 11.7. Example of two classes referencing each other
Example of two classes referencing each other

Here's a fist attempt at an implementation in C++

// this is Bomb.h
#include "Timer.h"

class Bomb
{
private:
  Timer *timer;
}
// this is Timer.h
#include "Bomb.h"

class Timer
{
private:
  Bomb *bomb[8];   // This works due to what is
                   // stated about the * later
}

Alternate notion:

// This is an alternate Timer.h
#include "Bomb.h"
#include <vector>

class Timer
{
private:
  vector<Bomb*> bomb; // Much safer :)
}

Discussion: What seems to be the problem? How could you solve this?

Answer in C++: Incomplete class definitions.

Works when we only need to know that there is a class with a certain name, but do not need to know any details (like in the class definition / header file).

In this case we can tell C++ that there is a class with that name, and that it will be defined elsewhere.

Notion: class classname semicolon. Example: class Timer;

Example:

// this is Bomb.h

class Timer;

class Bomb
{
private:
  Timer *timer;
}
// this is Timer.h

class Bomb;

class Timer
{
private:
  Bomb *bomb[8];
}