Я уверен, что есть простое объяснение для этого, но у меня есть некоторый код, как это:C++ компилятор дает инициализированы переменные предупреждения при объявлении, если-иначе заявления
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()
EDIT: Вот некоторые реальный код. Является ли ошибка все еще переменной областью? Я понимаю в этом примере, но это проблема? Я пробовал условную инициализацию формы: RoutingTablePoolEntry rtpe(routeEntryPtr == nullptr? ... : ...);
, но это тоже не слишком помогло.
EDIT # 2: Я идиот, извините. Причина совершенно ясна, и я просто этого не видел.
rtpe = RoutingTablePoolEntry(destRouter)
и rtpePtr = &(rtpeItr->second)
в тонкий шанс, кто делает этот багор, тоже.
Пожалуйста, напишите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Обратите внимание, что 'doThing' не увидит ни один из« объектов », объявленных в вашем коде, потому что они недоступны. – MikeCAT