没有匹配函数来调用'Board :: Board()'

时间:2015-04-28 20:39:27

标签: c++

这种错误正在发生,我不知道为什么。 首先,我想制作一个BattleShip游戏,我已经有了一些课程,我需要实现一些功能。我从画板开始,但我的时间非常糟糕。如果有人对此感兴趣或做过这件事,可以给我一些帮助,我会非常感激。这是我学期的最后一个项目,我的脖子上有一根绳子。

这就是问题所在。

我有我的董事会成员

class Board {
public:
    Board(const string &filename);
    //bool putShip(const Ship &s);
    void moveShips();
    //bool attack(const Bomb &b);
    void display()const;
    void show()const;
    void initializeGrid();


private:
    int numLines, numColumns;
    //vector <Ship> ships;
    vector <vector<int> > board;
};

和我的玩家类

class Player{
public:
    Player(string playerName, string boardFileName);
    void showBoard() const;
    //Bomb getBomb() const;
    //void attackBoard(const Bomb &b);
private:
    string name;
    Board board;
};

我想通过从txt中读取他的尺寸来创建一个板(尚未完成)。

但是当我这样做时:

Player::Player(string playerName, string boardFileName){

    name = playerName;
    board = boardFileName;

}

和这个

void Player::showBoard() const{

    Board b01;

}

我收到以下错误:

没有匹配函数来调用'Board :: Board()'

3 个答案:

答案 0 :(得分:2)

您已声明以下构造函数:

Board(const string &filename);

因此,未生成默认构造函数。这就是您在以下行中收到错误的原因:

Board b01;  // default ctor does not exist

答案 1 :(得分:0)

您应该为Board类定义一个空构造函数,或者在Board(const string &filename);方法中定义b01时使用现有的showBoard构造函数。

答案 2 :(得分:0)

发生错误消息,因为类Board没有默认构造函数。然而,似乎它不需要具有默认构造函数。

只需按以下方式更改类Player的构造函数的定义

Player::Player(string playerName, string boardFileName) 
    : name( playerName ), board( boardFileName )
{
}

对于成员函数showBoard,则无需创建本地对象b01,因为您似乎必须输出与该类的数据成员板对应的板。或者您可以使用复制约束器来创建本地对象,例如

void Player::showBoard() const
{
    Board b01( board );
}