簡體   English   中英

在if-else語句中聲明時,C ++編譯器會給出單位化變量警告

[英]C++ compiler gives unitialized variable warnings when declared in if-else statements

我敢肯定有一個簡單的解釋,但是我有一些這樣的代碼:

  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)可能有rtpePtr = &(rtpeItr->second)了這個錯誤。

if和else后面的語句中聲明的每個對象都具有這些語句的范圍。 在if-else語句之后,該對象不可見且處於活動狀態。

您的變量在if語句中是局部的。 可能您有一個對象的先前聲明,該聲明未初始化,因為未使用。 在這種情況下,您會收到一條警告,而沒有對該對象進行任何先前的聲明,則會收到一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM