我无法在代码中找到错误并尝试了所有内容。这是我第一次使用地图,所以我不确定这是如何获得第二个键的值。这是我的代码:
bool DeleteConnection(ServerData &sd, ServerName sn, UserName un){
if(sd.find(sn) == sd.end()){
return false;
}
else{
auto search = sd.find(sn);
if(search != sd.end()) {
std::set<string> users = search->second;
}
const bool is_in = users.find(un) != users.end();
if(is_in){ //un connected
users.erase(un);
sd[sn] = users;
return true;
}
else{ //un not connected
return false;
}
}
}
答案 0 :(得分:3)
对象users
的范围是if语句的子语句。
if(search != sd.end()) {
std::set<string> users = search->second;
}
在if语句的范围之外,名称users
未定义。
实际上功能设计是错误的。你应该重写函数体。
答案 1 :(得分:2)
正如莫斯科的Vlad指出,if
范围结束后,您的users
变量不再存在,因此当您尝试在if
之外使用它时会出现错误范围。我会重写你的功能,使其更清晰:
bool DeleteConnection(ServerData &sd, ServerName sn, UserName un)
{
auto search = sd.find(sn);
if (search == sd.end())
return false;
std::set<string> users = search->second;
if (users.find(un) == users.end())
return false;
users.erase(un);
sd[sn] = users;
return true;
}