2016-12-09 17 views
1

私はかなり新しくcppですので、これがばかげた質問であればお詫び申し上げます。私はクラスを作成し、それを私が作った別のクラスに含めたいと思っています。上記のクラスのコンストラクタを作成すると、サブクラスの変数が作成されますが、サブクラスのデフォルトのコンストラクタを呼び出そうとしているようですが、これは持っていません。コンストラクタを呼び出さずに変数を設定する方法はありますか?私は私がコンパイルしようとすると、私は次のようなエラーコンストラクターが他のコンストラクターを呼び出す

game.cpp:3:16: error: no matching function for call to ‘TTTBoard<TTTBoard<char> >::TTTBoard()’ Game::Game(void) { 

どれでも助けを得るので、これは何が起こっているかと思い

game.hpp

class Game { 
    private: 
    char players[2]; 
    char curPlayer; 
    TTTBoard<TTTBoard<char>> board; <------- 
    int curBoard[2]; 
    int nextBoard[2]; 
    bool finished; 

    public: 
    Game(); 
    const bool isFinished() const; 
    const char getCurPlayer() const; 
    const char next(); 
    void setCurBoard(int x, int y); 
    void printWholeBoard(); 
    void printCurBoard(); 
    void setPos(int x, int y); 
}; 

は多くは感謝しています。ありがとう

+1

はい、デフォルトコンストラクタを呼び出しています。いいえ、あなたはそれを定義していません。あなたは何かを正しく構築していません。残念ながら、実際のコンストラクタとすべての関連するクラス宣言を表示できませんでした。したがって、答えはありません。 –

答えて

1

はい、デフォルトのコンストラクタTTTBoard<TTTBoard<char>>がここで呼び出されます。それがない場合は、member initializer listを使用して、適切なコンストラクタを指定して、というコンストラクタの実装でメンバboardを初期化する必要があります。

メンバ初期化子リストは、これらのオブジェクトのデフォルト以外の初期化を指定できる場所です。参照のメンバやconst修飾された型のように、既定で初期化できないメンバの場合、メンバ初期化子を指定する必要があります。

class Game { 
    private: 
    TTTBoard<TTTBoard<char>> board; 

    public: 
    Game() : board(some_arguments) {} 
    //  ~~~~~~~~~~~~~~~~~~~~~~~ 
}; 
関連する問題