class hoge{
 private:
 int h_size;
 class foo *h_foo;
 public:
 hoge(){ h_size=0; }
 void setFoo(class foo *f){ h_foo=f; }
 int get_h_size(){ return h_size; }
 void h_print(){ cout<<h_foo->get_f_size()<<endl; }
};

class foo{
 private:
 int f_size;
 class hoge *f_hoge;
 public:
 foo(){ f_size=1; }
 void setHoge(class hoge *h){ f_hoge=h; }
 int get_f_size(){ return f_size; }
 void f_print(){ cout<<f_hoge->get_h_size()<<endl; }
};

二つのクラスの関連を双方向にしたいのですが、上記だと
型が宣言されていないため 'get_f_size' は 'foo' のメンバーではない(関数 hoge::h_print() )
という、コンパイルエラーが出てしまいます。これは関連の実装が間違って
いるのでしょうか?それともアクセスの仕方が間違っているのでしょうか?
教えて下さいませ