Array[n] vs Array[10] - Inicialización de matriz con variable frente a literal numérico

Resuelto msmf14 asked hace 11 años • 1 respuestas

Tengo el siguiente problema con mi código:

int n = 10;
double tenorData[n]   =   {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Devuelve el siguiente error:

error: variable-sized object 'tenorData' may not be initialized

Mientras que el uso double tenorData[10]funciona.

¿Alguien sabe por qué?

msmf14 avatar Feb 22 '13 05:02 msmf14
Aceptado

En C++, las matrices de longitud variable no son legales. G++ permite esto como una "extensión" (porque C lo permite), por lo que en G++ (sin -pedanticseguir el estándar de C++), puedes hacer:

int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++

Si desea una "matriz de longitud variable" (mejor llamada "matriz de tamaño dinámico" en C++, ya que no se permiten matrices de longitud variable adecuadas), debe asignar memoria dinámicamente usted mismo:

int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!

O, mejor aún, utilice un contenedor estándar:

int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>

Si aún desea una matriz adecuada, puede usar una constante , no una variable , al crearla:

const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)

De manera similar, si desea obtener el tamaño de una función en C++ 11, puede usar constexpr:

constexpr int n()
{
    return 10;
}

double a[n()]; // n() is a compile time constant expression
Cornstalks avatar Feb 21 '2013 22:02 Cornstalks