Por que a declaração de classe não funciona quando a classe é incluída em outra classe

Isso compila

#include "Sprite.h"

class GameObject
{
  public:
      int x, y, w, h;
      Sprite sprite;
  public:
    GameObject();
    GameObject(int _x, int _y, int _w, int _h);
    virtual ~GameObject();
};

Isso não

class Sprite;

class GameObject
{
  public:
      int x, y, w, h;
      Sprite sprite;
  public:
    GameObject();
    GameObject(int _x, int _y, int _w, int _h);
    virtual ~GameObject();
};

Eu sei que poderia encaminhar declarar e usar o ponteiro para Sprite, mas por que a declaração de encaminhamento não funciona aqui. "Classifica Sprite"; diz que o Sprite existe? Estou tentando # incluir tantas classes em .cpp e evitá-lo em .h a qualquer custo. Além disso, as classes não se incluem, portanto, não há necessidade de usar o Sprite *. Acho que meu entendimento sobre o que é declarar a frente está errado ou algo assim, porque não vejo uma razão para que isso não funcione.

Desde já, obrigado.

questionAnswers(3)

yourAnswerToTheQuestion