Метод «Setter» не изменяет свойство, а метод test выводит «test»? (Представлено с минимальным воспроизводимым примером) - PullRequest
1 голос
/ 05 апреля 2020
Player::Player() {
    target = new NPC();
}

NPC Player::getTarget() {
    return *target;
}

Это метод, который получает адрес памяти текущего NP C.

NPC::NPC() {
    relationship = -35.0;
}

float NPC::getRelationship() {
    return relationship;
}

bool NPC::setRelationship(float r) {
    relationship = r;
    return false;
}

Это функции получения и установки.

Я использую класс игрока и передача его в качестве аргумента p методу onTrigger ():

float rel = p->getTarget().getRelationship();

Это вызываемый "getter"

cout << p->getTarget().setRelationship(rel - 10.0);

Это вызываемый "setter".

Я попытался создать метод test, который просто выводит «test», и я вызвал его вместо метода «setter». Это сработало. Так что проблема должна быть в определении сеттера ... но это выглядит идеально: (

1 Ответ

3 голосов
/ 05 апреля 2020

Этот метод

NPC Player::getTarget() {
    return *target;
}

создает временный объект типа NP C. Таким образом, изменение этого временного объекта не влияет на объект, на который указывает цель.

Если вы хотите изменить исходный объект, вы должны вернуть его по ссылке, как, например,

NPC & Player::getTarget() {
    return *target;
}
...