Estoy tratando de declarar una variable en un bloque if-else de la siguiente manera:Declarar una variable en un bloque if-else en 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
}
Pero, estoy consiguiendo los siguientes errores cuando intento compilar:
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
¿Alguna idea?
Este consejo es correcto, pero le sugiero que podría evitar todo el puntero/conmutador de referencia al final al tener un método de fábrica que tome su parámetro de tipo y devuelve un 'Player *'. Entonces su método principal se convierte en 'Player & player = * getPlayerByType (argv [3]);', y las declaraciones 'if' en' getPlayerByType() 'cada devolución directamente, evitando así toda esa fealdad de variable local. – bradheintz
@bradheintz: Ese consejo no ayuda en lo más mínimo (de hecho, complica la respuesta al proporcionar consejos espurios). Es obvio que el OP realmente está tratando de hacer exactamente lo que usted dice (y devolver una referencia (en lugar de un puntero como en su solución)). Pero ha publicado la versión simplista compilable de la pregunta aquí. Si desea publicar una respuesta, haga eso, al menos podemos darle una calificación negativa por no responder la pregunta. –
No estoy seguro de lo espúreo de empaquetar la creación de objetos en una función de responsabilidad única, eliminando una variable local innecesaria y haciendo que la función main() sea más escaneable, pero si te hace más feliz llamar a mi consejo "espurio", o para llamar a un refinamiento sugerido de los buenos consejos de Brian R. Bondy "abarrotar" sin apoyar la afirmación, ve por ello. – bradheintz