2017-11-13 3 views
-3

Wenn ich meinen Code ausführen dann geht Compiler zu else Teil und exceut sowohl if und else Anweisung innerhalb der else Teil. Warum?Sowohl if als auch else Teil werden ausgeführt

+0

Debuggen Sie es, lernen Sie, Breakpoints zu verwenden. Wir werden nie wissen, was bMultipleSelect() und subNode-> getXmlId() – Asesh

+0

zurückgibt, es ist nur eine Variable –

+0

Zeigen Sie uns ein vollständiges Beispiel mit den Daten, wo dies geschieht. –

Antwort

1

Das scheint ... (vorübergehend mein tactfulness Attribut zu erhöhen, um Straftaten zu vermeiden) ... eher unwahrscheinlich :-)

Es ist wahrscheinlich, weil der Code mehr als einmal eingegeben wird, und Sie nur unter der Annahme, es führt beide Teile wegen der Ausgabe durch.

Mein Rat wäre, den Code in den äußeren else zu ändern zu sein:

LOG(Severity_Error)<<"Starting inner if "; 
if(subNode->getXmlId() == iXmlId) 
{ 
    LOG(Severity_Error)<<"2 "; 
    subNode->setbSelected(!subNode->bSelected()); 
} 
else 
{ 
    LOG(Severity_Error)<<"3 "; 
    subNode->setbSelected(false); 
} 
LOG(Severity_Error)<<"Ending inner if "; 

Sie sollten nicht sieht beiden Blöcke ohne ein dazwischenliegendes Ende Ausführen/Start-Nachricht eingestellt.

+0

siehe meinen obigen vollständigen Code –

+0

@SubhamGupta, Ihr voller Code hat das gleiche Problem wie Ihr ursprünglicher Code. Es gibt nichts darin zu beweisen, dass sowohl die if- als auch die else-Blöcke für eine gegebene Iteration ausgeführt werden. Bitte tun Sie, was ich vorgeschlagen habe, und versuchen Sie es erneut - Sie werden mit ziemlicher Sicherheit feststellen, dass Sie den Programmfluss einfach nicht vollständig verstehen (was das unglaublich unwahrscheinliche Ereignis eines Compiler-Fehlers verhindert). – paxdiablo

Verwandte Themen