我有Game,Room,Left和Inventory类。
游戏包含一个Room对象和一个doSomething()
函数。
Room包含一个Chest对象的向量,一个方法addChest
(将一个Chest添加到Chests向量)和一个方法getChest
,该方法从Chests向量(给定的索引)中返回一个Chest。 >
胸部包含一个库存对象。
还有一个open()
函数,通过引用将Inventory对象作为参数。
在doSomething()
函数中,我向room1添加一个箱子,然后调用open()
函数,并以我刚添加的room1的箱子中的清单作为参数。
仅编写以下代码会在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;
}
我不明白为什么会发生此错误。但是,我知道,如果我在&
中的Chest之后添加getChest()
,该错误就会消失。
原始代码有什么问题? /还有什么其他修复方法?
答案 0 :(得分:2)
还有哪些其他修复方法?
将open方法的原型更改为:
void open(const Inventory &inventory)
或将getChest方法更改为此,如@ 1201ProgramAlarm所述:
Chest& getChest(int index)
将引用存储在向量中的对象。
发生错误是因为程序员试图执行的操作表明即将发生逻辑错误,因为该方法需要可变的左值引用,但是您正在传递临时对象。
不是错误的原因,但这里有个提示:
您无需在代码中使用this
指针。我建议您再读一次this
。 When should I make explicit use of the `this` pointer?