Массив[N] в массив против[10] - инициализирует массив с переменными против вещественное число
у меня возникли следующие проблемы с моим код:
int n = 10;
double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
возвращает следующую ошибку:
error: variable-sized object 'tenorData' may not be initialized
а через double tenorData[10]
строительство.
кто-нибудь знает почему?
1 ответ:
в C++, массивы переменной длины, не являются законными. G++ позволяет это как "расширение" (потому что C позволяет это), так и в G++ (не будучи
-pedantic
о следовании стандарту C++), вы можете сделать:int n = 10; double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Если вам нужен "массив переменной длины" (лучше называемый "массивом динамического размера" в C++, поскольку правильные массивы переменной длины не допускаются), вам либо нужно динамически выделять память самостоятельно:
int n = 10; double* a = new double[n]; // Don't forget to delete [] a; when you're done!
или, еще лучше, использовать стандартные контейнер:
int n = 10; std::vector<double> a(n); // Don't forget to #include <vector>
если вы все еще хотите правильный массив, вы можете использовать постоянный, а не переменная при создании это:
const int n = 10; double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
аналогично, если вы хотите получить размер функции в C++11, вы можете использовать
constexpr
:constexpr int n() { return 10; } double a[n()]; // n() is a compile time constant expression