Как инициализировать массив uint64_t в 0 в C++?
Я использую Atmel 6.2 и пишу приложение для Arduino. У меня проблема с этими строками кода:
int total = 3;
uint64_t myarray[total] = {};
Это дает следующую ошибку
ошибка: граница массива не является целочисленной константой перед токеном ']'
Почему это происходит?
4 ответа
Это
int total = 3;
uint64_t myarray[total] = {};
является определением массива переменного размера, потому что размер массива не является константным выражением времени компиляции.
Такие массивы условно поддерживаются C99. Однако эта функция отсутствует в C++ (хотя некоторые компиляторы могут иметь свои собственные языковые расширения, включающие эту функцию в C++), и компилятор правильно выдает ошибку.
Либо вы должны использовать константу в определении массива, например, так
const int total = 3;
uint64_t myarray[total] = {};
или вы должны рассмотреть возможность использования другого контейнера, как, например, std::vector<uint64_t>
если вы предполагаете, что размер массива можно изменить во время выполнения.
Вы должны предоставить константы времени компиляции (или constexpr
s) как размер массива.
Использовать этот:
const int total = 3;
"Всего" должно быть постоянным. Также я бы предпочел std::array массивам в стиле C (просто личное предпочтение).
int const total = 3;
std::array<uint64_t, total> values = {};
Если вам нужен динамический массив, используйте std:: vector.
Ваш вопрос не очень ясен, вы хотите обнулить инициализацию или хотите исправить ошибку.
Как и предполагалось, вы можете использовать константу времени компиляции для исправления ошибки.
const int total = 3;
uint64_t myarray[total] = {};
Для инициализации нуля вы можете использовать следующий код.
std::fill_n(myarray, total, 0);
Но, если вам нужен массив переменного размера, вы можете сделать это с помощью указателей следующим образом.
int total = 3;
uint64_t *myarray = new uint64_t [total]; // This will be created at run time