2016-07-25 40 views
-1

Ich bin sicher, dass dies eine einfache Erklärung gibt es, aber ich habe einige Code wie folgt aus:C++ Compiler gibt unitialized Warnungen Variable, wenn erklärt in if-else-Anweisungen

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: Hier ist einige echte Code. Ist der Fehler noch variabel? Ich erkenne es im Beispiel, aber ist das immer noch das Problem hier? Ich versuchte bedingte Initialisierung des Formulars: RoutingTablePoolEntry rtpe(routeEntryPtr == nullptr? ... : ...);, aber das schien auch nicht zu viel zusammenzuarbeiten.

EDIT # 2: Ich bin ein Idiot, Entschuldigung. Der Grund ist sehr klar und ich sah es einfach nicht.

rtpe = RoutingTablePoolEntry(destRouter) und rtpePtr = &(rtpeItr->second) in der schlanken Chance jemanden machen diesen Gaffel auch.

+3

Bitte veröffentlichen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). Beachten Sie, dass "doThing" keines der Objekte in Ihrem Code deklariert, da sie außerhalb des Bereichs liegen. – MikeCAT

Antwort

5

Jedes Objekt, das in den Anweisungen nach if und else deklariert ist, hat den Geltungsbereich dieser Anweisungen. Nach der if-else-Anweisung ist das Objekt nicht sichtbar und lebendig.

1

Ihre Variablen sind lokal für die if-Anweisung. Wahrscheinlich haben Sie eine vorherige Deklaration des Objekts, das nicht initialisiert wird, weil es nicht verwendet wird. In diesem Fall erhalten Sie eine Warnung, ohne vorherige Deklaration dieses Objekts erhalten Sie einen Fehler.