我得到 '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;
}