2017-06-12 3 views
-2

So lerne ich, wie BWAPI zu verwenden, und lernen C++ auf dem Weg.Verwendung von -> in if-Anweisungen

ich auf dem Tutorial bin nach durch und haben Sie den Befehl:

auto &u : Broodwar->self()->getUnits() 
...  
if (pool && (u->isIdle() && !u->train(UnitTypes::Zerg_Zergling))) 

Der Befehl funktioniert als Tutorial gedacht, Zerglinge gebaut werden, wenn die Bedingungen erfüllt sind. Meine Frage ist, wie ich die if-Anweisung modifiziere/umformatiere, um etwas zusätzlich zum Aufbau von Zerglingen zu tun.

Das heißt, würde ich so etwas wie die psudo-Code ausführen möchten:

if (pool && (u->isIdle() && !u)){ 
    train(UnitTypes::Zerg_Zergling) 
    pointless_counter++; 
    foo--; 
    bar=3*3; 
} 

ich wahrscheinlich verwirrt bin sowohl die „->“ oder Betreiber seit meiner Erfahrung ist „u“ in R. Im Zusammenhang, ich denke, !u->train(UnitTypes::Zerg_Zergling) übersetzt in: "Point to object u, (wenn es falsch ist/nicht da?), führen Sie seine interne vordefinierte Befehlsfolge, Option Zergling."

+4

'auto & u: ...' Das ist nicht Standard C++. Wie hast du das kompiliert? Sie sollten auch die Vorrangstellung des Operators nachlesen. – Rakete1111

+7

Sie sollten ein (gutes) [C++ Tutorial oder Buch] (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) vor lesen. C++ ist komplex genug, dass Sie es nicht mit dem Tuto aus einer Bibliothek lernen können. – nefas

+2

Siehe Operatorenpräzedenztabelle [hier] (https://stackoverflow.com/q/20767745/509868) – anatolyg

Antwort

0

Also die oben genannten Personen haben dazu beigetragen, in meinem Selbststudium zu helfen, und ich habe ihre Kommentare nach besten Kräften aufgestockt. Es gab zwei Komponenten zu meiner Verwirrung.

Das erste Problem ist, dass der Operator '->' nach '!' Gelesen wird. Der erste Befehl war:

if (pool && u->isIdle() && !u->train(UnitTypes::Zerg_Zergling)){ foo++;} 

Wo u eine Instanz einer vordefinierten Klasse ist, und der Pool ist etwas boolean Variable. Bei einigen Klärung Klammern, durch C++ 's Operator Vorrang gelesen (siehe Kommentar oben):

if (pool && u->isIdle() && !(u->train(UnitTypes::Zerg_Zergling))){ foo++;} 

Und der neu geschrieben Befehl, als wäre bestimmt:

if (pool && u->isIdle()){ 
    u->train(UnitTypes::Zerg_Zergling); 
    pointless_counter++; 
    foo++; 
    bar=3*3; 
} 

Das zweite Problem ist, dass diese C++ (abhängig vom Compiler), ist vollkommen glücklich, Befehle innerhalb der Bedingungen einer if-Anweisung auszuführen oder zuzuteilen, weshalb der Befehl erschreckend leer erschien. Dies ist in anderen Sprachen, mit denen Benutzer vertraut sind, nicht üblich. Zum Beispiel:

if(x=3){ foo++; } 

Wird tatsächlich den Wert 3 zu x zuweisen, anstatt einen Fehler zu werfen. Zumindest mit dem Compiler, den ich verwende. Der im Lernprogramm angegebene Befehl geht davon aus, dass der Student mit dieser Funktionalität vertraut ist, indem er Werte an u innerhalb der Bedingung sendet, insbesondere: u->train(UnitTypes::Zerg_Zergling).

Verwandte Themen