tengo una clase como estaobjeto de tamaño variable no puede ser inicializado
class aClass
{
public:
aClass() : N(5) {}
void aMemberFunction()
{
int nums[N] = {1,2,3,4,5};
}
private:
const int N;
};
El código de prueba es
int main()
{
aClass A;
A.aMemberFunction();
const int N = 5;
int ints[N] = {5,4,3,2,1};
return 0;
}
Cuando compilo (g ++ 4.6.2 20111027), consigo el error
problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Si comento hacia fuera de la línea con int nums[N]
no consigo un error de compilación, por lo que el código similar para el ints
matriz está bien. ¿No se conoce el valor de N
en tiempo de compilación?
¿Qué está pasando? ¿Por qué se considera nums
una matriz de tamaño variable? ¿Por qué las matrices nums
y ints
se manejan de manera diferente?
En C++ las matrices requieren expresiones constantes para su tamaño. es decir, debe ser una constante en tiempo de compilación, pero N en su ejemplo se inicializa dinámicamente a través de un literal. – AraK
Tenga en cuenta que 'gcc' en realidad admite matrices de longitud variable en C++ como una extensión que usted [no puede inicializar de esa manera] (http://stackoverflow.com/a/27339171/1708801) –