为什么我的地图的第二个值没有修改?

时间:2019-04-01 04:04:31

标签: c++ dictionary

我正在开发一个聊天室程序,并且试图将用户添加到聊天室地图中。我的聊天室地图存储在我的Server类中,它看起来像这样:map<Chatroom*,int> chatrooms其中int是聊天室中的用户数。在我的Server类中,也是服务器中当前所有用户的向量:

vector<User*> current_usersserver.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;
 }

1 个答案:

答案 0 :(得分:1)

get_chatrooms返回地图的副本。当您尝试更改会议室中的用户数时,您是在更改副本中的值,而不是server.chatrooms中的值。

更改get_chatrooms以返回引用:

map<Chatroom*, int> &Server::get_chatrooms()