Arduino IDE: массив связан - PullRequest
       22

Arduino IDE: массив связан

0 голосов
/ 06 апреля 2020

Я получаю ошибку связанного массива в Arduino IDE для следующего кода. Это можно решить, если я поставлю результат расчета для «выборки» (в данном случае это 50), но это своего рода фиктивное решение. Я хочу, чтобы программное обеспечение делало это для себя, а не для ручных вычислений и вставки. Какой будет обходной путь? Спасибо!

int des_freq=200; 
int ncycles=5;
int sample =1000/(des_freq*T); 
float V_sin_bip[sample]; // error here

1 Ответ

1 голос
/ 07 апреля 2020

Начиная с версии 1.6.6, IDE Arduino по умолчанию включает C ++ 11. Но стандарт C ++ (до C ++ 11) не поддерживает массивы переменного размера. Стандарт C ++ 11 упоминает размер массива как выражение-константу.

float V_sin_bip[sample]; использует переменное выражение для указания размера массива. Таким образом, возникает ошибка.

Если вам нужен «массив переменной длины» (лучше называемый «динамически изменяемый массив» в 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)
...