Je rencontre le problème suivant avec mon code:
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Renvoie l'erreur suivante:
error: variable-sized object 'tenorData' may not be initialized
Alors que l'utilisation double tenorData[10]
fonctionne.
Quelqu'un sait pourquoi?
c++
arrays
initialization
size
msmf14
la source
la source
Réponses:
En C ++, les tableaux de longueur variable ne sont pas autorisés. G ++ permet cela comme une "extension" (car C le permet), donc en G ++ (sans être
-pedantic
sur le point de suivre le standard C ++), vous pouvez faire:int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Si vous voulez un "tableau de longueur variable" (mieux appelé "tableau de taille dynamique" en C ++, puisque les tableaux de longueur variable appropriés ne sont pas autorisés), vous devez soit allouer dynamiquement de la mémoire vous-même:
int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done!
Ou, mieux encore, utilisez un conteneur standard:
int n = 10; std::vector<double> a(n); // Don't forget to #include <vector>
Si vous voulez toujours un tableau approprié, vous pouvez utiliser une constante , pas une variable , lors de sa création:
const int n = 10; double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
De même, si vous souhaitez obtenir la taille d'une fonction en C ++ 11, vous pouvez utiliser un
constexpr
:constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression
la source
vector
, sont incroyablement utiles.