我正在用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或“”,所以我不知道该怎么做,提前谢谢
答案 0 :(得分:0)
Items
类型的每个对象都有weapon
,armour
和gold
成员。您的Player
类具有三个类型为Items
的对象。这意味着它有三批weapon
,armour
和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);
但是,我建议删除Items
中的setter函数,只是让它有一个你可以使用的构造函数:
Items items("Battle Axe", "Gold Chest Plate", 10);
Player player(10, 20, 1, items);
另一种设计是完全摆脱Items
课程,只需weapon
成员armour
,gold
和Player
成员:< / 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)
标题中的