尝试实例化新对象时出错

时间:2014-10-30 05:01:50

标签: c++ class struct instantiation

我有一个AdventureGame类,它有一个构造函数。当我尝试创建一个新的AdventureGame对象时,我收到错误"没有匹配函数来调用' AdventureGame :: AdventureGame()'

这是我的一些类,构造函数和main。

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class AdventureGame 
{
private:
public:
    int playerPos;
    int ogrePos;
    int treasurePos;
    string location;

    AdventureGame(int ogre, int treasure) 
    {
        playerPos = -1;
        ogrePos = ogre;
        treasurePos = treasure;
        location = "";
    }; 

.
.
.  // other functions that I'm sure are irrelevant
.
.

    int main() 
    {
        AdventureGame game;
        int numMoves = 0;
        std::string move;

        while (!game.isGameOver(game.playerPos)) 
        {
            game.printDescription(game.playerPos);
            cout << "Which direction would you like to move? (forward, left, or right)" << endl;
            cin >> move;
            game.move(move);
            numMoves++;
        }
    }

如何制作新游戏?

4 个答案:

答案 0 :(得分:1)

您的构造函数需要两个参数来传递它们。

比如说:

AdventureGame游戏(3,5);

答案 1 :(得分:0)

您应该创建一个空构造函数:

AdventureGame() 
{
    playerPos = -1;
    ogrePos = 0;
    treasurePos = 0;
    location = "";
}; 

或始终创建您的类,将ogrePos和treasurePos值传递给它:

    AdventureGame game(0,0);

创建空的和参数化的构造函数可能是有意义的。

答案 2 :(得分:0)

您正在调用默认构造函数而不定义它。只需调用AdventureGame game;即可调用未定义的构造函数AdventureGame() {};。为了调用AdventureGame(int ogre,int treasure),在主函数中写AdventureGame game (arg1, arg2)

如果您使用的是C ++ 11,我建议最佳做法是始终使用此格式AdventureGame game {}创建新对象。使用此格式,AdventureGame game {}调用默认构造函数,AdventureGame game {arg1, arg2 ...}调用其他相应的构造函数。

请注意,AdventureGame game ();不会调用默认构造函数!!

享受编码!!

答案 3 :(得分:0)

缺少默认构造函数

AdventureGame() 
{
    playerPos = -1;
    ogrePos = 0;
    treasurePos = 0;
    location = "";
}