我正在开发一个聊天室程序,并且试图将用户添加到聊天室地图中。我的聊天室地图存储在我的Server
类中,它看起来像这样:map<Chatroom*,int> chatrooms
其中int是聊天室中的用户数。在我的Server
类中,也是服务器中当前所有用户的向量:
vector<User*> current_users
。 server.getUsers()
返回current_users
,而server.get_chatrooms()
返回映射chatrooms
。我的功能可以将用户正确添加到聊天室中,但是,它不会增加聊天室中的用户数。我在问题出在哪里写了评论。
这是功能。
void Controller::add_user_to_chatroom(){
string username, chatroom_name;
User* user;
bool foundChat = false;
bool foundUser = false;
view.username_prompt();
cin >> username;
//this loops checks to see if user is on the server
for(auto x : server.get_users()){
if(x->getUsername() == username){
user = x;
foundUser = true;
break;
}
}
if(!foundUser){
cout << "No user found.\n" << endl;
}
else{
view.chatroom_name_prompt();
cin >> chatroom_name;
//adds user to chatroom, but doesn't increment the number
for(auto x : server.get_chatrooms()){
if(x.first->get_name() == chatroom_name){
x.first->add_user(user);
//line below doesn't work, tried x.second++;
server.get_chatrooms().at(x.first) += 1;
foundChat = true;
break;
}
}
if(!foundChat){
cout << "Chatroom not found.\n" << endl;
}
}
}
当我打印聊天室时,我的输出如下所示:
Chatroom Name: Sports, Users: joey1212, , Num Users: 0
但是,它应该看起来像这样:
Chatroom Name: Sports, Users: joey1212, , Num Users: 1
,因为聊天室中只有一个用户。
为什么x.second
不更新?我已将多个用户添加到同一聊天室,并且num个用户从未更新。以防万一,这里是add_user_to_chatroom()
这里是Server::get_users()
vector<User*> Server::get_users(){
return users;
}
这里是Server::get_chatrooms()
map<Chatroom*, int> Server::get_chatrooms(){
return chatrooms;
}
答案 0 :(得分:1)
get_chatrooms
返回地图的副本。当您尝试更改会议室中的用户数时,您是在更改副本中的值,而不是server.chatrooms
中的值。
更改get_chatrooms
以返回引用:
map<Chatroom*, int> &Server::get_chatrooms()