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

あなたのコンパイラは正しく、一致するコンストラクターはありません。

使いました:

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

これは次と同じではありません:

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

あなたのヘッダーに

于 2013-03-28T21:53:45.730 に答える
0

あなたはかなり混乱しているようです。これは継承とは関係ありません。これがコンポジションです。

type の各オブジェクトには、、、Itemsおよびweaponメンバーarmourがありgoldます。あなたのPlayerクラスには、 type の3 つのオブジェクトがありItemsます。つまりweapon、 、armour、の 3 つのロットがあることを意味しますgoldPlayerを1セットだけ持ってほしいと思っていることは間違いありません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ように使用するコンストラクターを持たせることをお勧めします。

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

Items別の設計は、クラスを完全に取り除き、weaponarmour、およびgoldのメンバーのみを作成すること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);

Itemsその後、で集約できますPlayer

于 2013-03-28T21:31:51.660 に答える