LATIF Ι.Κ Ответов: 2

Изменение значений переменных членов объекта C++


Specify a void function called battle (). This function will accept two Player type objects and a double type variable. The function will control which of them
two players have a higher level and will add to that player's experience
the value of the variable of type double. In essence the double variable will get one
a value that corresponds to the experience of winning a battle. Unlike
previous work here we want to change the value of the winner's experience! In case

where both players have the same level to display the message ΄Tie΄.


может ли кто-нибудь помочь мне найти истину?

Что я уже пробовал:

void battle(Player &player , Player &player1 , double battle_xp){
				battle_xp = 1000;
				
				if (player.level > player1.level){
					player.getExp() == player.getExp() + battle_xp;
					player.setExp(player.getExp());
									}
				else if (player.level < player1.level){
					player1.getExp() == player1.getExp() + battle_xp;
					player1.setExp(player.getExp());
				}
				else{
					cout << "Tie \n";
				}		
			};

KarstenK

Почему вы игнорировали предупреждения компилятора вашего кода??? Они являются криком компилятора о вашем запутанном коде.

2 Ответов

Рейтинг:
2

Richard MacCutchan

if (player.level > player1.level){
    player.getExp() == player.getExp() + battle_xp;
    player.setExp(player.getExp());
}

В этом нет никакого смысла. Выражение player.getExp() == player.getExp() это сравнение двух значений (одного и того же объекта - так что они всегда будут равны) и возврат true или false Таким образом, добавление числа к этому возвращаемому значению ничего не значит. Следующая строка имеет еще меньше смысла, поскольку вы устанавливаете значение из того же значения.
Все, что вам нужно сделать, это добавить battle_xp значение к значению, возвращаемому из getExp, и передайте это в setExp метод.

Попробуйте подумать о логических шагах, которые необходимы, прежде чем вы действительно напишете какой-либо код.


Рейтинг:
18

k5054

У вас есть следующее:

player1.getExp() == player1.getExp() + battle_xp;

1) оператор == используется для сравнения, а не присвоения и
2) я могу только предполагать Player::getExp не возвращает назначаемый объект (т. е. именующее выражение), поэтому даже если у вас есть правильный оператор, компилятор должен жаловаться на то, что не может выполнить задание.

Вы наверняка предпочтете
player.setExp(player.getExp()+exp)
А еще лучше, если вам будет разрешено изменить Player класс, почему бы не добавить а Player::addExp(double) метод?


LATIF Ι.Κ

Я не могу добавить этот метод, потому что у меня есть это упражнение для домашнего задания, и профессор не хочет его...я сделал так, как вы можете мне сказать, но это все еще не меняет значения exp :/