【问题标题】:C++ compiler gives unitialized variable warnings when declared in if-else statementsC++ 编译器在 if-else 语句中声明时给出未初始化的变量收益
【发布时间】:2016-07-25 15:55:45
【问题描述】:

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

  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) 任何人都会犯这种错误的可能性很小。

【问题讨论】:

标签: c++ compilation compiler-warnings


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 2022-01-17
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      相关资源
      最近更新 更多