インデントに全角空白を使ってますがご容赦を

class House{
  struct Hage{
  };
  class Oil{
  public:
    Hage* hage_generator();
  };
  Oil oil;
public:
  void hoge(){
    Hage* wonderful_hage = oil.hage_generator();
  }
};

Hage* House::Oil::hage_generator(){
  return new Hage;
}

クラス内クラスなんですが、これはコンパイル通りませんでして、解決には
hage_generatorをclass内で記述するか、Hageの宣言をHouseの外に出せば良いわけですが、
それ以外の方法でどうにかならないでしょうか

Houseでしか使えないHageを、出来ればHouseの外に出したくないんです