2014-01-30 31 views
1

因此,我正在制作一个程序,它将查找所有可能的单词(由字典定义)的一个boggle游戏(谷歌它,如果你不知道它是什么是)。无论如何,我有3类/对象:字典,游戏板和bogglegame。 bogglegame应该梳理字典和游戏板,并找到所有合法的单词。我对bogglegame构造看起来像用另一个对象作为参数在构造函数中创建一个对象

BoggleGame::BoggleGame(Dictionary dictionaryIN, GameBoard gameboardIN)

和词典和游戏键盘的contsrtuctors样子

Dictionary::Dictionary(set<string> wordsInDictionaryIN, unsigned maxLengthIN) GameBoard::GameBoard(vector<vector<string> > gamestateIN, unsigned boardSizeIN)

,当我尝试编译我得到,说:“错误的错误:没有匹配函数调用'Dictionary :: Dictionary()“

我想能够通过在词典ry和gameboard对象从主存入到构造函数中,并将它们存储为BoggleGame对象的私有成员,使BoggleGame对象成为2个对象的对象。

编辑:邮政代码

构造BoggleGame

#include "BoggleGame.h" 

BoggleGame::BoggleGame(Dictionary dictionaryIN, GameBoard gameboardIN) 
{ 
    dictionary = dictionaryIN; 
    gameboard = gameboardIN; 
} 

#pragma once 

#include "Dictionary.h" 
#include "GameBoard.h" 

class BoggleGame 
{ 
public: 
    BoggleGame(Dictionary dictioanryIN, GameBoard gameboardIN); 
    void foundWord(string wordIN); 
    string findTheWords(string w, unsigned row, unsigned column); 
    set<string> getTheFoundWords() {return foundWords;} 
    bool isInDictionary(string word); 
    bool isOffBoard(unsigned row, unsigned column); 
    bool usedTile(unsigned row, unsigned column); 
    vector<vector<string> > getTheGameBoard(){gameboard.getGameBoard();} 

private: 
    Dictionary dictionary; 
    GameBoard gameboard; 
    set<string> foundWords; 
}; 

#pragma once 
#include <set> 
#include <vector> 
#include <string> 
#include <iterator> 

using std::set; 
using std::string; 
using std::vector; 

class Dictionary 
{ 
public: 
    Dictionary(set<string> wordsInDictionaryIN, unsigned maxLengthIN); 
    bool isInDictionary(string wordIN); 
    void foundWord (string wordIN); 
    string findTheWords(string w, unsigned row, unsigned column); 
    unsigned getMaxLength() {return maxLength;} 

private: 
    set<string> wordsInDictionary; 
    unsigned maxLength; 
    set<string> foundWords; 

}; 

#pragma once 
#include <vector> 
#include <string> 

using std::string; 
using std::vector; 

class GameBoard 
{ 
public: 
    GameBoard(vector<vector<string> > gamestateIN, unsigned boardSizeIN); 
    bool outOfBoard(unsigned row, unsigned column); 
    bool getTileUseState(unsigned row, unsigned column){return usedTiles.at(row).at(column);} 
    void setTileUsed(unsigned row, unsigned column); 
    vector<vector<string> > getGameBoard(){return gamestate;} 
    unsigned getSize(){return boardSize;} 
    vector<vector<bool> > getUsedTiles() {return usedTiles;} 
    string readTile(unsigned row, unsigned column) {return gamestate.at(row).at(column);} 
    void previousState(vector<vector<bool> > previous) {usedTiles = previous;} 

private: 
    vector<vector<string> > gamestate; 
    vector<vector<bool> > usedTiles; 
    unsigned boardSize; 
}; 
+0

你可以发布给出错误的行吗? – Brian

+1

你正在尝试在某处调用默认的ctor(无论'Dictionary :: Dictionary()'所指的行是什么),但是你有一个用户定义的ctor,所以它禁止生成默认的ctor。 –

回答

0

错误在于BoggleGame的构造函数。您没有Dictionary的默认构造函数。你可以代替你的构造使用初始化列表:

BoggleGame::BoggleGame(Dictionary _dictionary) 
    : dictionary{_dictionary} 

或者,Dictionary提供一个默认的构造函数:

Dictionary() = default; 
Dictionary() { } 

出现错误的原因是因为dictionary是缺省构造的。当您将新值分配给dictionary时,您正在使用复制分配操作员。通过使用构造函数初始化列表,您可以直接初始化dictionary。为了演示:

BoggleGame::BoggleGame(Dictionary _dictionary) 
{ 
    dictionary = _dictionary; 
} 

Default. 
Copy assignment. 

BoggleGame::BoggleGame(Dictionary _dictionary) 
    : dictionary{_dictionary} 
    { 
    } 

Copy constructor. 

大的差异,你可以看到。

+0

,如果这个工作,我假设为GameBoard类似的事情?我也得到了同样的错误。 – undermark5

+0

@ undermark5这是一回事,是的。 – 2014-01-30 04:27:27

0

也许这是您在类BoggleGame中声明Dictionary对象的方式。

比方说,你做某事像这样:

类BoggleGame {

私人: 字典迪科;

}

在这种情况下,会出现一个编译错误,如果构造字典::字典()不存在。

所以我觉得,你的问题的解决方案应该是两种:

  • 声明无参数的构造函数中Dictionary类
  • 申报迪科为指针(也就是平均字典*迪科)

但是,如果您发布代码会更好。

+0

是的,这将解决我的编译错误,但它不会有利于我的问题,因为我已经创建了一个字典对象的主要传递给BoggleGame的构造函数。 – undermark5

+0

在这种情况下,只需创建Dictionary的默认构造方法,不需要任何内容​​,就可以这样做。 – user3173787

+0

好吧,似乎现在修复我的编译错误,看看它是否做到了我想要的(或者至少接近它) – undermark5

相关问题