0

我正在使用 Atmel 6.2 并为 Arduino 编写应用程序。我对这些代码行有疑问:

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

它给出了以下错误

错误:数组绑定在 ']' 标记之前不是整数常量

为什么会这样?

4

4 回答 4

4

这个

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

是可变大小数组的定义,因为数组的大小不是编译时常量表达式。

C99 有条件地支持这种类型的数组。然而,这个特性在 C++ 中不存在(尽管一些编译器可以有自己的语言扩展,在 C++ 中包含这个特性)并且编译器正确地发出错误。

您应该在数组的定义中使用一个常量,例如像这样

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

或者您应该考虑使用另一个容器,例如std::vector<uint64_t>,如果您认为可以在运行时更改数组的大小。

于 2015-08-06T08:02:57.600 回答
3

您必须提供编译时常量(或constexprs)作为数组大小。

用这个:

const int total = 3;
于 2015-08-06T07:57:51.727 回答
1

“总计”必须是常量。我也更喜欢 std::array 到 C 风格的数组(只是个人喜好)。

int const total = 3;

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

如果您需要动态数组,请使用std::vector

于 2015-08-06T08:28:40.050 回答
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
于 2015-08-06T08:21:15.043 回答