2015-04-28 29 views
0

這個錯誤正在發生,我不知道爲什麼。 首先,我想製作一個BattleShip遊戲,並且我已經有了一些課程,而且我需要實現一些功能。我從畫板開始,但我的時間非常糟糕。如果以前有人對此感興趣或者做過這些,可以給我一點幫助,我會很感激。這是我最後一個學期的項目,我的脖子上掛了一根繩子。沒有匹配的函數調用'Board :: Board()'

這是問題所在。

我有我的局級

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; 

} 

我得到以下錯誤:

呼叫沒有匹配功能的「公告板::董事會()

回答

0

您應該爲您的Board類定義一個空的構造函數,或者使用您現有的0123當在您的showBoard方法中定義b01時,構造函數爲。

+0

但是,該構造函數是在項目中實現的「函數」之一。 Board(const string&filename); //從文件'filename'加載板子 如何使用它在函數showBoard上打印我的板子? – Verance

+0

@ user2074085,當然,也要定義它,但是如果你定義了這個構造函數,你需要創建一個空的構造函數來聲明像Board b01這樣的對象。 –

+0

好的,可以說我只會使用Board(常量字符串和文件名);構造函數。是否可以通過指定文件名來創建Board類型的對象? 文件名獲得了關於我想要製作的主板的所有信息。 例如: random.txt: 董事會10x10 它將讀取10每10和製作一個董事會。我不知道如果我清楚 – Verance

2

您已經聲明下面的構造:

Board(const string &filename); 

由於這個原因,未生成默認的構造函數。這就是爲什麼你會在下面的行中發生錯誤:

Board b01; // default ctor does not exist 
0

由於類Board沒有默認構造函數,因此出現錯誤消息。儘管如此,它似乎並不需要有默認的構造函數。

只需改變類播放器的構造函數的定義如下方式

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

至於成員函數showBoard那麼就沒有任何必要創建一個本地對象B01,因爲它似乎你要輸出板對應於該類的數據成員板。或者,您可以使用複製約束器創建本地對象,例如

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

非常感謝。 你有什麼機會幫助我配置函數以在txt上指定的信息打印電路板? – Verance

+0

@Verance我很抱歉。我不明白你的意思。 –

+0

我需要一些幫助來製作電路板。你有Skype或什麼的? – Verance