我正在获得用户'在这方面没有申明

时间:2018-03-17 13:36:08

标签: c++ scope variable-declaration

我无法在代码中找到错误并尝试了所有内容。这是我第一次使用地图,所以我不确定这是如何获得第二个键的值。这是我的代码:

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;
  }
}
}

2 个答案:

答案 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;
}