我得到 'users' was not declared in this scope
I am getting 'users' was not declared in this scope
我找不到我的代码中的错误并尝试了所有方法。这是我第一次使用地图,所以我不确定这就是我获取第二个键值的方式。这是我的代码:
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;
}
}
}
对象users
的范围是if语句的sub-statement。
if(search != sd.end()) {
std::set<string> users = search->second;
}
在 if 语句的范围之外,名称 users
未定义。
其实功能设计是错误的。你应该重写函数体。
正如来自莫斯科的 Vlad 指出的那样,一旦 if
范围结束,您的 users
变量将不复存在,因此当您尝试在 [=11] 之外使用它时会出现错误=] 范围。我会重写你的函数以使其更清晰:
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;
}
我找不到我的代码中的错误并尝试了所有方法。这是我第一次使用地图,所以我不确定这就是我获取第二个键值的方式。这是我的代码:
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;
}
}
}
对象users
的范围是if语句的sub-statement。
if(search != sd.end()) {
std::set<string> users = search->second;
}
在 if 语句的范围之外,名称 users
未定义。
其实功能设计是错误的。你应该重写函数体。
正如来自莫斯科的 Vlad 指出的那样,一旦 if
范围结束,您的 users
变量将不复存在,因此当您尝试在 [=11] 之外使用它时会出现错误=] 范围。我会重写你的函数以使其更清晰:
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;
}