2 に答える
問題は、 をgetParent()
返すことですBaseNode*
。これは、 の任意の型へのポインタである可能性があります。BaseNode
また、 から派生した無関係なクラスを指す可能性がありますBaseNode
。親が type でなければならないことが 100% 確実な場合はMatch
、親を最初にキャストしてから、Match*
それを呼び出すことができますgetPlayer()
。
Player* Set::getPlayer1() const{
return dynamic_cast<Match*>(getParent())->getPlayer1();
}
親が必要でない場合はMatch
NULLdynamic_cast
を返す可能性があるため、必ず確認してください。
階層とメソッド名を本当に再編成する必要があると思います...これはあなたの質問とは関係ありませんが、一般的に Set が Match から継承される理由を理解するのは難しいようです。(試合にセットはありませんか?)
ゲームはポイントで構成され、セットはゲームで構成され、試合はセットで構成されます...ポイントはプレーヤーが獲得します。
おそらく、より現実世界に近い構造にする必要があります。
ちょうど私の $.02
編集
おそらく、セットのマップ (セット 1、2、3 など) と、Player1() と player2() ではなくメソッド Player(int) を含む Match オブジェクトが必要です。また、Set クラスに player のメソッドを用意する必要もないようです。セットは、それがプレイされている試合を指します。