Массив[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 52

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