>>167
これは書籍(14歳シリーズ)を参考に書いた処理で、
今も自信ないけど、以下の様な感じで相互参照のクラスが出来てしまってます。

選手22人分の移動関数をループから同じ書き方で呼び出しても、
異なる移動関数を選択できるようにしたいという目的があり、まず移動関数を持つ基底クラスを作成。
その基底クラスの継承クラス内で移動関数をオーバーライドしてその関数を呼び出せれば様々な移動関数を使えるはず。
継承クラスのオブジェクトのポインタを格納するための「 基底クラスのポインタ型を持つメンバ変数を選手のデータ内に持たせ 」て、
そのポインタから移動関数を呼べば良い。
選手のオブジェクトからそのポインタを使って移動関数を呼ぶ時に選手のアドレス(thisポインタ?)を引数に持たせてやり、「 移動関数はそのthisポインタから選手の座標などのデータを呼び出し、更新する」。

上記の「」のところで、
選手のクラスは移動関数のクラスのポインタをデータに持つためには、選手のクラスが宣言される前に移動関数のクラスが定義されてなくてはならないし、
移動関数のクラスが選手のオブジェクトのポインタを通して選手のデータを使うには、移動関数の宣言より先に、選手のクラスが宣言されていないと選手の座標データを使った関数の中身が書けない。

・・・というのが相互参照になった理由です。