2014-12-09 3 views
0

Я искал это несколько раз и до сих пор не могу найти ответ на эту проблему. Я получаю сообщение об ошибке говорящее error C2106: '-=' : left operand must be l-value'=' левый операнд должен быть l-значением

Мой код выглядит следующим образом

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

+0

"Решение: изменить тип возвращаемого' getGold() '." Этот ответ содержит примерно столько же информации, сколько и ваш вопрос. Пожалуйста, добавьте всю необходимую информацию для создания [MCVE] (http://stackoverflow.com/help/mcve); в частности, определение «игрока» и его тип. – Angew

+3

Обычно это будет 'player.setGold (player.getGold() - mItemCost);' и т. Д. –

+0

Просьба показать декларацию о задействованных функциях. –

ответ

2

Вы пытаетесь присвоить значение вызову метода, который является незаконным, если возвращаемое значение не является ссылкой.

Вы, вероятно, имел в виду что-то вроде

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

Вы пытаетесь присвоить возвращаемое значение функции и на основании ошибки функция не возвращает ссылку.

У вас есть два варианта исправить это.

  1. Запишите (при необходимости) и используйте соответствующие сеттеры вместо каждой ошибки.

    player.setGold(player.getGold() - mItemCost) 
    
  2. Вместо этого получатели возвращают ссылки.

Рассмотрите эту простую программу, которая воспроизводит ошибку.

#include <stdio.h> 

int foo = 0; 
int getFoo() { 
    return foo; 
} 
int main(){ 
    getFoo() = 5; // error here. 
} 

Мы можем исправить ошибку, изменив подпись функции, чтобы вернуть ссылку.

int& getFoo() { 
    return foo; 
} 

Обратите внимание, что это не идиоматических способ сделать это, но будет работа.

Смежные вопросы