这可能是我的另一个新手错误,但我似乎找不到一个可以回答它的问题,而且我想如果我的公开无能帮助私人,那可能是最好的。无论如何,对自己手头的问题进行自我鞭..
在我的文字冒险标题中,我有一个这样的结构:
struct roomStruct
{
// The room the player is currently in, and its interactive objects.
string roomName;
string size;
bool exits[dirnum];
bool rustyKeyIn;
bool goldKeyIn;
...
这样的例子:
void genRooms(roomStruct *rms)
{
// Generating the rooms of the house, and what items they contain
rms[entrance].roomName.assign("the entrance hallway. It's a small room with an exit to the south.");
rms[entrance].exits[north] = noexit;
rms[entrance].exits[east] = noexit;
rms[entrance].exits[south] = livingroom;
rms[entrance].exits[west] = noexit;
rms[entrance].rustyKeyIn = false;
rms[entrance].goldKeyIn = false;
在int main()里面我有一个像这样的功能:
// Generate the world.
roomStruct rooms[roomnum];
genRooms(rooms);
进一步说,我有我认为是问题的区域:
// Check for items in the current room.
if( rooms[currentRoom].rustyKeyIn = true )
{
cout << "A rusty key." << endl;
}
if( rooms[currentRoom].goldKeyIn = true )
{
cout << "A gold key." << endl;
}
...
现在问题。没有编译器问题,但是当我运行代码时,每个房间都会列出每个项目,无论bool是设置为true还是false。毫无疑问,解决方案很简单,但它坚持要求我解决。
答案 0 :(得分:3)
您错误地使用了assign运算符,它始终将rustyKeyIn
设置为true并返回true。
所以你应该使用比较运算符operator ==
if( rooms[currentRoom].rustyKeyIn = true )
应该是
if( rooms[currentRoom].rustyKeyIn == true )
// ^^^
或者只是做
if (rooms[currentRoom].rustyKeyIn)
答案 1 :(得分:2)
您使用=
代替==
。
当你这样做时:
if(a = true) {
...
}
如果将a设置为true,然后询问表达式的结果(a的新值)是否为真,那么它现在是。
你想要的是:
if(a == true) {
...
}
或者更简洁(也更常见):
if(a) {
...
}
答案 2 :(得分:0)
使用==
表示相等,=
表示作业。