2016-12-09 154 views
1

我對cpp相當陌生,所以如果這是一個愚蠢的問題,我很抱歉。我創建了一個課程,並希望它包含在我創建的另一個課程中。當我爲上面的類創建構造函數時,它創建了一個子類變量,但它似乎試圖調用子類的默認構造函數,而我沒有它。有沒有辦法在不調用構造函數的情況下設置變量?構造函數調用其他構造函數

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); 
}; 

我認爲這是什麼原因發生的事情,當我嘗試編譯我收到以下錯誤

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

任何幫助是非常讚賞。謝謝

+1

是的,它調用默認的構造函數。不,你還沒有定義它。你沒有正確地構建一些東西。不幸的是,你沒有顯示你的實際構造函數和所有相關的類聲明。因此,沒有答案是可能的。 –

回答

1

是的,這裏將調用TTTBoard<TTTBoard<char>>的默認構造函數。如果它沒有,則需要使用member initializer list來指定相應的構造函數,以在實現Game的構造函數時初始化成員board

成員初始化列表是可以指定這些對象的非默認初始化的地方。對於不能被默認初始化的成員,例如引用成員和常量限定類型,必須指定成員初始值設定項。

例如,

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

    public: 
    Game() : board(some_arguments) {} 
    //  ~~~~~~~~~~~~~~~~~~~~~~~ 
}; 
相關問題