2016-12-09 35 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) {} 
    //  ~~~~~~~~~~~~~~~~~~~~~~~ 
};