0

クラス内に配置された配列に値を入力する際に​​問題があります。メソッドを使用してこれを実行しようとしています。私のコードは次のようになります。

#include <iostream>

using namespace std;

//class for items
class Item{
string name;
int amount;
public:
Item();
Item(string, int);

//returns the name of an item
string getName(){
    return name;
}
//sets name for items
void setName(string name){
    this->name = name;
}

//returns the amount of items
int getAmount(){
    return amount;
}
//sets the amount for items
void setAmount(int amount){
    this->amount = amount;
}
};

//first constructor
Item::Item(){
name="none";
amount=0;
}

//second constructor
Item::Item(string name, int amount){
this->name=name;
this->amount=amount;
}

//class for hero with "Items" array
class Hero{
string name;
Item inventory[20];
public:
Hero();
Hero(string);

//returns the name of the hero
string getName(){
    return name;
}
//sets the name for the hero
void setName(string name){
        this->name = name;
}
};

//first constructor
Hero::Hero(){
name="none";
}

//second constructor
Hero::Hero(string name){
this->name=name;
}

int main() {
Hero firsthero;
string name;
//giving hero the name
cout<<"Input name: ";
cin>>name;
firsthero.setName(name);
//printing the hero's name
cout<<firsthero.getName()<<endl;
//setting the items;
Item sword;
Item armor;
Item potion;
//setting items' values;
sword.setName("sword");
sword.setAmount(1);
armor.setName("armor");
armor.setAmount(1);
potion.setName("potion");
potion.setAmount(3);
//gives these items into array "inventory" in the "firsthero" class
return 0;
}

「剣」、「鎧」、「ポーション」のアイテムを firsthero に追加したいのですが、それを可能にするメソッドを「Hero」に記述する方法が見つかりませんでした。フィールドを公開することでそれらを直接ロードすることもできましたが、それはお勧めできません。

4

2 に答える 2

0

Heroクラスでサイズ 20 の配列を使用する代わりに、 std::vector. addItemのメソッドがある場合Heroは、ヒーローがもうアイテムを保持できるかどうかを簡単にチェックできます (inventory.size()作成した定数、おそらく のようなものに対してチェックしますMAX_INVENTORY_SIZE)。

だから、このようなもの:

std::vector<Item> inventory;
const int MAX_INVENTORY_SIZE = 20;
...

//returns true if it successfully added the item, false otherwise
bool Hero::addItem(Item i) {
    if(inventory.size < MAX_INVENTORY_SIZE) {
        inventory.push_back(i);
        return true;
    }

    return false;
}

...

hero.addItem(sword);
hero.addItem(armor);
hero.addItem(potion);
于 2013-09-23T19:16:11.287 に答える
0

アイテムのアクセサ メソッドを記述する必要があります。

class Hero
{
private:
    std::string name;
    std::array<Item, 20> inventory; // use the array container instead of C-style arrays
    unsigned int itemCount;

public:
    Hero() : itemCount(0) {}
    Hero(string n) : name(n), itemCount(0) {}

    //returns the name of the hero
    string getName()
    {
        return name;
    }
    //sets the name for the hero
    void setName(const std::string& name)
    {
        this->name = name;
    }

    const Item& getItem(int i) const { return inventory[i]; } // NOTE:  you may want some bounds checking here, but this is basically what you are doing
    Item& getItem(int i) { return inventory[i]; } // to update a particular item

    void addItem(const Item& item) { inventory[itemCount++] = i; } // same with bounds checking here
};
于 2013-09-23T19:20:36.067 に答える