2012-03-10 4 views
0

私はクラスGameとクラスPlayerを持ち、PlayerというインスタンスはGameクラスのメンバーです。別のクラスのメンバーとしてのカスタムクラスのインスタンス

Game::Game() : player(screen, player_image, 390, 290) { } 

私はそれを行うために友人に言われましたが、私は二つの理由から、ということ嫌い:私はそのライン上の選手に、変数「画面」を渡すと 1、画面が正しく初期化されていません私は後でもう一度それを渡す必要があります。 2.悪いように、私はこのようなコードを今日まで私がこれを行うように言われたときまで見たことがなかった。

だから、周りに道があるのですか?ありがとうございました。

私が持っている私の.HPPファイルで

:私たちはあなたの決定的な答えを与えるために、あなたのタイプのために少しより多くのコードを参照する必要が

public: Player player; 
+0

ファイル'Player'?できるだけ多くの場合、世界を分割してコードをレンダリングします。新しいオブジェクトを追加したり、ヘッドレスのマルチプレイヤーをすることを決定したときに、それはライフをより簡単にするでしょう。 – ssube

+1

'今日は、これまで言われていたときまで、これほどのコードは見たことがありませんでした。 –

答えて

4

。しかし、他のメンバフィールドを他のメンバフィールドのctorに渡すことは間違っていますので、すでに初期化されています。例えば

class Game { 
    Screen screen; 
    PlayerImage player_image; 
    Player player; 

    Game() : 
    screen(42), 
    player(screen, player_image, 390, 290) { 

    } 
}; 

注:初期化リストが実行される順序は、フィールドがclass内で宣言される順序に依存して、順序は、初期化リストに記載されていません。したがって、型で依存関係の順番でフィールドを宣言することが重要です。

EDIT

OPは、ヘッダとCPPファイル

間の分割を要請ヘッダー:

class Game { 
    Screen screen; 
    PlayerImage player_image; 
    Player player; 

    Game(); 
}; 

CPP `Screen`はに結合しているなぜ

Game::Game() : 
    screen(42), 
    player(screen, player_image, 390, 290) { 

    } 
+0

私はあなたのコードを理解していない、それはヘッダファイルですか?私の質問に投稿したコードの最初の行は、途中で.cppファイルです。 –

+1

@ user996056のように、C++の最初の章を読んでいると思われるので、答える価値のない基本的な質問をしています。 – Griwes

+0

@ user996056はい、私のサンプルは簡潔にするためにヘッダファイルに含まれています。ヘッダーとcppファイルの間で簡単に分割することもできます。それを行う方法を表示する編集を追加します。 – JaredPar

関連する問題