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é?
c++
arrays
initialization
size
msmf14
fuente
fuente
Respuestas:
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 tratar
-pedantic
de seguir el estándar C ++), puede hacer:int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Si desea una "matriz de longitud variable" (mejor denominada "matriz de tamaño dinámico" en C ++, ya que no se permiten las matrices de longitud variable adecuadas), debe asignar memoria de forma dinámica usted mismo:
int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done!
O, mejor aún, use 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 un
constexpr
:constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression
fuente
vector
, son increíblemente útiles.