0

我正在用 C++ 创建一个基于文本的冒险游戏,这是我的玩家类,我从健康、耐力和键参数开始,它运行良好。

class Player
    {
    public:
        Player();

        Player(int health, int stamina, int keys, Items weapon, Items armour, Items gold);

        void setHealth(int healthParam);
        int getHealth() const;

        void setStamina(int staminaParam);
        int getStamina() const;

        void setKeys(int keysParam);
        int getKeys() const;

        void setWeapon(Items weaponParam);
        Items getWeapon() const;

        void setArmour(Items armourParam);
        Items getArmour() const;

        void setGold(Items goldParam);
        Items getGold() const;

    private:
        int health;
        int stamina;
        int keys;
        Items weapon;
        Items armour;
        Items gold;

    };

然后我创建了一个名为 items(如下)的类,我希望我的播放器从该类继承变量

class Items
{
public:
    Items();

    void setWeapon(string weaponParam);
    string getWeapon() const;

    void setArmour(string armourParam);
    string getArmour() const;

    void setGold(int goldParam);
    int getGold() const;

private:
    string weapon;
    string armour;
    int gold;

};

#endif

如您所见,我的玩家类中有一个重载的构造函数,我希望玩家获取属性武器、盔甲和金币,但在我的主要部分我遇到了问题(主要如下)

int currentKeys = 0;
string userInput;

Player player(100, 100, currentKeys, "", "", 0);

我得到的错误是告诉我我没有与我的播放器类中的构造函数匹配的构造函数实例,我只想知道是否有人可以帮助我解决我的问题?在字符串的情况下,我所有的属性最初都设置为 0 或 "",所以我不知道该怎么做,在此先感谢

4

3 回答 3

0

你似乎很困惑。这与继承无关。这是组合。

每个类型的对象都Items将具有weaponarmourgold成员。你的Player类有三个类型的对象Items。这意味着它有weaponarmour和三个批次gold。我相当确定你希望你Player只有一套Items. 所以改变:

Items weapon;
Items armour;
Items gold;

只是:

Items items;

现在让你的Player构造函数只接受一个Items对象:

 Player(int health, int stamina, int keys, Items items);

items它应该用这个参数初始化成员。现在你可以Player像这样创建你的:

Items items;
items.setWeapon("Battle Axe");
items.setArmour("Gold Chest Plate");
items.setGold(10);
Player player(10, 20, 1, items);

但是,我建议去掉 setter 函数,Items让它有一个构造函数,你可以像这样使用它:

Items items("Battle Axe", "Gold Chest Plate", 10);
Player player(10, 20, 1, items);

另一种设计是完全摆脱Items类,只制作weapon,armourgold的成员Player

int health;
int stamina;
int keys;
std::string weapon;
std::string armour;
int gold;

那么构造函数应该是这样的:

Player(int health, int stamina, int keys, std::string weapon, std::string armour, int gold);
于 2013-03-28T21:31:36.537 回答
0

我建议创建一个 Items 构造函数

Items(string weapon, string armour, int gold);

并将您的播放器构造函数更改为

Player(int health, int stamina, int keys, Items items);

然后,您可以ItemsPlayer.

于 2013-03-28T21:31:51.660 回答
0

你的编译器是对的,没有匹配的构造函数。

你用过:

Player(int,int,int,const char*,const char*,int)

这与以下内容不同:

Player(int,int,int,Item,Item,Item)

在你的标题中

于 2013-03-28T21:53:45.730 回答