'='左操作数必须是l值

时间:2014-12-09 08:25:10

标签: c++ pointers

我已多次搜索过这个问题但仍无法找到答案。我一直收到错误error C2106: '-=' : left operand must be l-value

我的代码看起来像这样

case 1:
            mItemCost = 4;
            if (player.getGold() >= 4){
                cout << "You have bought a dagger which replaces your current weapon!" << endl;
                player.getGold() -= mItemCost; // Error here
                player.getWeapon().mName = "Dagger";
                player.getDamageRange().mLow = 1; // Error here
                player.getDamageRange().mHigh = 4; // Error here
            }

播放器是指向另一个类的指针。我真的很感激任何帮助。谢谢:D

2 个答案:

答案 0 :(得分:2)

您正在尝试为方法调用分配值,除非返回值是引用,否则这是非法的。

你可能意味着像

player.setGold(player.getGold() - mItemCost);

答案 1 :(得分:1)

您正在尝试分配函数的返回值,并且根据错误,该函数不会返回引用。

您有两种方法可以解决此问题。

  1. 写入(如有必要)并使用适当的setter代替每个错误。

    player.setGold(player.getGold() - mItemCost)
    
  2. 让getters返回引用。

  3. 考虑这个简单的程序来重现错误。

    #include <stdio.h>
    
    int foo = 0;
    int getFoo() {
        return foo;
    }
    int main(){
        getFoo() = 5; // error here.
    }
    

    我们可以通过更改函数的签名来修复错误以返回引用。

    int& getFoo() {
        return foo;
    }
    

    请注意,这是这种惯用方式,但工作。