继承麻烦,课程?

时间:2013-03-28 21:25:45

标签: c++ class inheritance text

我正在用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或“”,所以我不知道该怎么做,提前谢谢

3 个答案:

答案 0 :(得分:0)

你好像很困惑。这与继承无关。这是作文。

Items类型的每个对象都有weaponarmourgold成员。您的Player类具有三个类型为Items对象。这意味着它有三批weaponarmourgold。我很确定您希望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);

但是,我建议删除Items中的setter函数,只是让它有一个你可以使用的构造函数:

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

另一种设计是完全摆脱Items课程,只需weapon成员armourgoldPlayer成员:< / p>

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);

答案 1 :(得分:0)

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

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

将玩家构造函数更改为

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

然后,您可以在Items中汇总Player

答案 2 :(得分:0)

您的编译器是正确的,没有匹配的构造函数。

您使用过:

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

与以下内容不同:

Player(int,int,int,Item,Item,Item)
标题中的