我只是在做一个小编程项目,我遇到了一个相当常见的错误,即未声明的东西:
MP_HighLevelData.c:230:15: error: ‘RemovedUser’ undeclared (first use in this function)
以为我刚刚忘记声明变量,我顺着源文件中的那行,发现错误指向这行代码:
User *RemovedUser;
奇怪,我不能声明一个新变量,因为它不存在?我确定不是这行代码有问题,所以这里有一个更完整的代码片段。我真的很想知道我做错了什么。
void RemoveUserFromGameRoom(User *User) {
if (User->GameRoom != NULL) {
GameRoom *GameRoom = User->GameRoom;
if (GameRoom->Owner == User) {
// We should delete the whole game room, since the owner is leaving and a new owner isn't chosen automatically
while (GameRoom->UsersHead != NULL) { // Awesome way of looping while there are users left in the room
// We need to get rid of all the users in this game room, including the owner, before we can remove it
User *RemovedUser;
RemovedUser = GameRoom->UsersHead->User;
DeleteUserPtrFromGameRoom(GameRoom->UsersHead); // Remove reference to the user from the game room
RemovedUser->GameRoom = NULL; // Remove reference to the game room from the user (needs to be set afterwards, whoops)
}
// All the users have been kicked out, now we can take care of the game room
FreeRIDfromGameCategory(GameRoom->RID, User->GameCategory);
ClearGameRoomName(GameRoom);
DeleteGameRoomFromGameCategory(GameRoom, User->GameCategory);
} else {
UserPtr *UserPtr = GameRoom->UsersHead;
while (UserPtr != NULL) {
if (UserPtr->User == User) {
DeleteUserPtrFromGameRoom(UserPtr);
User->GameRoom = NULL;
break;
}
UserPtr = UserPtr->next;
}
}
}
}