2013-03-28 3 views
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; 

    }; 

Затем я создал класс под названием элементов (ниже), и я хочу, чтобы мой плеер, чтобы наследовать переменные из этого класса

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 или «» в случае строк, поэтому я не уверен, что делать, спасибо заранее

+1

Я не вижу конструктор 'Player', который принимает' (Int , int, int, char *, char *, int) ' – Tushar

+0

Как строковый литерал (" ") конвертируется в' Items'? – mfontanini

+0

Это злоупотребление наследованием. Действительно ли игрок является предметом? У игрока есть предмет более точный. – andre

ответ

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 и просто позволить ему иметь конструктор, который вы будете использовать, как это:

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

альтернативный дизайн должен был бы избавиться от Items класса полностью и просто сделать weapon, armour и 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); 
+0

Второй вариант кажется намного лучше первого. Я не уверен, какую ценность имеет класс 'Items'. – john

+0

@john Возможно, набор 'Items' может существовать независимо от' Player'. –

+0

Ну, может быть, но зачем их группировать? Кажется мне немного произвольным. В любом случае ОП знает, это его мир. Ему просто нужно создавать классы, которые естественны для создаваемой им игры. – john

0

Я хотел бы предложить, чтобы создать элементы, конструктору

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

И изменить свой конструктор игрок в

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

Затем вы можете заполнить Items в Player.

0

Ваш компилятор прав, без соответствующего конструктора.

Вы использовали:

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

, которая не является такой же, как:

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

в заголовке вашего

Смежные вопросы