[英]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.