У меня есть классы Game, Room, Chest и Inventory.
Игра содержит объект Room и функцию doSomething()
.
Room содержит вектор объектов Chest, метод addChest
(который добавляет сундук к вектору сундуков) и метод getChest
, который возвращает сундук из вектора сундуков (с указанным индексом).
Сундук содержит объект инвентаря.
Также имеетсяopen()
функция, принимающая в качестве аргумента объект инвентаризации по ссылке.
В функции doSomething()
я добавляю сундук в комнату1 и вызываю функцию open()
с аргументом как инвентарь из сундука комнаты1.только что добавленный.
Простое написание приведенного ниже кода приводит к ошибке в open(this->room1.getChest(0).inventory);
#include <vector>
using namespace std;
class Inventory {
};
class Chest {
public:
Inventory inventory;
};
class Room {
vector<Chest> chests;
public:
Room();
inline void addChest(Chest chest) { this->chests.push_back(chest); }
inline Chest getChest(int index) { return this->chests[index]; }
};
class Game {
Room room1;
public:
void doSomething();
};
void open(Inventory &inventory) {
//Inventory management
}
void Game::doSomething() {
Chest chest;
this->room1.addChest(chest);
open(this->room1.getChest(0).inventory); //Error here: initial value of reference to non-const must be an lvalue
}
int main() {
Game game;
game.doSomething();
return 0;
}
Я не понимаю, почему эта ошибка происходит.Однако я знаю, что если я добавлю &
после Сундука в getChest()
, ошибка исчезнет.
Что не так с исходным кодом?/ Какие еще есть способы исправить это?