#visual-c
#visual-c
Вопрос:
Я не могу сравнить (list[0].getOwned() == false) Я также не могу фактически изменить данные с помощью (list[0].setOwned(true);)
#include <iostream>
#include <iomanip>
#include <string>
#include <stdlib.h>
using namespace std;
class Weapon
{
private:
bool owned; // bool for item owned
string item; // string for Item 1
string sound; // string for Sound
public:
Weapon(bool O, string I, string S)
{
bool owned = O;
string item = I;
string sound = S;
}
Weapon()
{
bool owned = false;
string item = "no name";
string sound = "no name";
}
void setOwned(bool O)
{
owned = O;
}
void setItem(string I)
{
item = I;
}
void setSound(string S)
{
sound = S;
}
bool getOwned()
{
return owned;
}
string getItem()
{
return item;
}
string getSound()
{
return sound;
}
};
int main()
{
const int NUM_WEAPONS = 5;
Weapon list[NUM_WEAPONS];
list[0] = Weapon(false,"Sword", "Shing");
list[1] = Weapon(false, "Axe", "Fwump");
list[2] = Weapon(false, "Dagger", "Tsk");
list[3] = Weapon(false, "Tiger Mount", "Roar");
list[4] = Weapon(false, "Shield", "Thud");
if (list[0].getOwned() == false)
{
cout << "You've purchased a Sword" << endl;
list[0].setOwned(true);
cash = cash - p1;
}
else if (list[0].getOwned() == true)
{
cout << "You already own this weapon" << endl;
}
}
Я ожидаю, что list[0].getOwned() == false для сравнения и прохождения через оператор if, чтобы затем установить для него значение true, чтобы вы не могли «купить его снова».
то, что он делает, это ничего, я неправильно использую объекты класса или я упускаю что-то совсем другое.
Ответ №1:
Weapon
конструктор объявляет и инициализирует локальную переменную с именем owned
. Он не инициализирует переменную-член this->owned
. Затем ваша программа демонстрирует неопределенное поведение путем доступа к неинициализированному объекту.