Ich versuche, eine Variable in einem if-else-Block zu erklären, wie folgt:Deklarieren eine Variable in einem if-else-Block in C++
int main(int argc, char *argv[]) {
if (argv[3] == string("simple")) {
Player & player = *get_Simple();
} else if (argv[3] == string("counting")) {
Player & player = *get_Counting();
} else if (argv[3] == string("competitor")) {
Player & player = *get_Competitor();
}
// More code
}
Aber ich bin immer die folgenden Fehler, wenn ich versuche zu kompilieren:
driver.cpp:38: error: unused variable ‘player’
driver.cpp:40: error: unused variable ‘player’
driver.cpp:42: error: unused variable ‘player’
driver.cpp:45: error: ‘player’ was not declared in this scope
Irgendwelche Ideen?
Dieser Ratschlag ist Ton, aber ich würde vorschlagen, dass Sie den ganzen Zeiger/die Reference switcheroo am Ende vermeiden konnten, indem Sie eine Fabrikmethode haben, die Ihren Typparameter nimmt und gibt einen 'Player *' zurück. Also wird Ihre Hauptmethode zu 'Player & player = * getPlayerByType (argv [3]);', und die 'if'-Anweisungen in' getPlayerByType() 'kommen jeweils direkt zurück und vermeiden so alle lokalen variablen Hässlichkeiten. – bradheintz
@bradheintz: Dieser Rat hilft nicht im Geringsten (in der Tat verstopft es die Antwort mit falschen Ratschlägen). Es ist offensichtlich, dass das OP tatsächlich versucht, genau das zu tun, was Sie sagen (und eine Referenz (anstatt einen Zeiger wie in Ihrer Lösung) zurückzugeben). Aber hat die simpel kompilierbare Version der Frage hier gepostet. Wenn Sie eine Antwort schreiben möchten, dann können wir Ihnen zumindest eine negative Note geben, wenn Sie die Frage nicht beantworten. –
Ich bin mir nicht sicher, was falsch daran ist, die Objekt-Erstellung in eine Single-Responsibility-Funktion zu packen, eine unnötige lokale Variable zu eliminieren und die main() -Funktion besser scanbar zu machen - aber wenn es dich glücklicher macht, meinen Rat "falsch" zu nennen, oder um eine vorgeschlagene Verfeinerung von Brian R. Bondys guten Ratschlag "überladen" zu nennen, ohne die Behauptung zu unterstützen, gehen Sie darauf ein. – bradheintz