“Setter”方法没有改变属性,但测试方法输出"test"? (以最小的可重现示例重新提交)

“Setter” method not changing a property, but a test method outputs "test"? (Resubmitted with minimal reproducable example)

Player::Player() {
    target = new NPC();
}

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

这是获取当前NPC内存地址的方法

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

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

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

这些是 getter 和 setter 函数。

我正在使用播放器 class 并将其作为参数 p 传递给 onTrigger() 方法:

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

这是被调用的"getter"

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

这是正在调用的 "setter"。

我试图创建一个只输出 "test" 的测试方法,我调用它来代替 "setter" 方法。有效。所以问题一定出在 setter 的定义中......但它看起来很完美:(

这个方法

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

创建 NPC 类型的临时对象。所以改变这个临时对象不会影响target指向的对象。

如果您想更改原始对象,则必须 return 通过引用将其

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