Tengo una clase que no tiene un constructor o un operador de asignación predeterminado, por lo que se declara y se inicializa dentro de una sentencia if/else dependiendo del resultado de otra función. Pero luego dice que está fuera del alcance más adelante aunque ambas rutas del condicional crearán una instancia.Alcance de variables en sentencias if
Considérese el siguiente ejemplo (hecho con int
sólo para ilustrar el punto):
#include <iostream>
int main()
{
if(1) {
int i = 5;
} else {
int i = 0;
}
std::cout << i << std::endl;
return 0;
}
No variables declaradas en un ir condicional fuera de alcance al final del condicional? ¿Cuál es la forma correcta de manejar la situación donde no hay un constructor predeterminado, pero los argumentos para el constructor dependen de ciertos condicionales?
Editar
A la luz de las respuestas dadas, la situación es más compleja así que quizás el enfoque tendría que cambiar. No es una clase base abstracta A y dos B y C clases que derivan de A. ¿Cómo sería algo como esto:
if(condition) {
B obj(args);
} else {
C obj(args);
}
cambio del enfoque? Como A es abstracto, no pude simplemente declarar A* obj
y crear el tipo apropiado con new
.
¿Su herencia es virtual o estática? – Dani
Virtual, creo. 'clase A' tiene una función virtual, si eso es lo que quieres decir (C++ no es mi fuerte, yo trabajo principalmente en Fortran) – tpg2114
En realidad puedes declarar un puntero a una clase abstracta; he editado mi respuesta. –