2015-08-06 2 views
0

Я использую Atmel 6.2 и пишу приложение для Arduino. У меня есть проблема с этими строками кода:Как инициализировать массив uint64_t до 0 на C++?

int total = 3; 
uint64_t myarray[total] = {}; 

Это дает следующее сообщение об ошибке

error: array bound is not an integer constant before ']' token

Почему это происходит?

+2

«Не целое * постоянное *», которого нет. – user2864740

+0

'total' должно быть' const'. –

+1

Размеры массива должны быть постоянной времени компиляции. – emlai

ответ

4

Это

int total = 3; 
uint64_t myarray[total] = {}; 

является определение массива переменного размера Becaue размера массива не является постоянным выражением во время компиляции.

Такой тип массивов условно поддерживается C99. Однако эта функция отсутствует в C++ (хотя некоторые компиляторы могут иметь свои собственные языковые расширения, которые включают эту функцию в C++), и компилятор правильно выдает ошибку.

Либо вы должны использовать константу в определении массива, например, как этот

const int total = 3; 
uint64_t myarray[total] = {}; 

или вы должны рассмотреть использовать другой контейнер, как, например std::vector<uint64_t>, если предположить, что Изя массива может быть изменен во время выполнения.

3

Вы должны указать константы времени компиляции (или constexpr s) в качестве размера массива.

Используется:

const int total = 3; 
0

Ваш вопрос не очень ясен, вы хотите инициализировать нуль или хотите исправить ошибку.

Как было предложено, вы можете использовать выражение константы времени компиляции для исправления ошибки.

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 
0

"total" должен быть const. Также я бы предпочел std :: array для массивов в стиле C (только для личных предпочтений).

int const total = 3; 

std::array<uint64_t, total> values = {}; 

Если вам нужен динамический массив, используйте зЬй :: вектор.

Смежные вопросы