当在if-else语句中声明时,C ++编译器会给出单元化变量警告

时间:2016-07-25 15:55:46

标签: c++ compilation compiler-warnings

我确定对此有一个简单的解释,但我有一些这样的代码:

  RoutingTablePoolEntry rtpe;
  RoutingTablePoolEntry* rtpePtr;

  if (rtpeItr == m_rtpool.end()) {
    RoutingTableEntry* routeEntryPtr = m_nlsr.getRoutingTable()
      .findRoutingTableEntry(destRouter);

    if (routeEntryPtr == nullptr) {
      RoutingTablePoolEntry rtpe(destRouter);
    }
    else {
      RoutingTablePoolEntry rtpe(*routeEntryPtr);
    }

    RoutingTablePoolEntry* rtpePtr = addRtpeToPool(rtpe);
  }
  else {
    RoutingTablePoolEntry* rtpePtr = &(rtpeItr->second);
  }
  doSomeStuffWithRtpe()
编辑:这是一些真实的代码。错误是否仍在变量范围内?我在这个例子中意识到,但这仍然是问题吗?我尝试了表单的条件初始化: RoutingTablePoolEntry rtpe(routeEntryPtr == nullptr? ... : ...);但似乎也没有太多合作。

编辑#2:我是个白痴,对不起。原因很清楚,我只是没有看到它。

rtpe = RoutingTablePoolEntry(destRouter)rtpePtr = &(rtpeItr->second) 在很小的机会中,任何人都会这样做。

2 个答案:

答案 0 :(得分:5)

在if和else之后的语句中声明的每个对象都具有这些语句的范围。在if-else语句之后,对象不可见并且活着。

答案 1 :(得分:1)

你的变量是if语句的本地变量。可能你有一个先前声明的对象,它没有被初始化,因为没有使用。在这种情况下,您会收到警告,如果没有此对象的任何声明,则会出现错误。