【问题标题】:expected primary-expression before ‘[’ token [duplicate]“[”标记之前的预期主表达式[重复]
【发布时间】:2016-07-24 20:02:37
【问题描述】:

我通常使用枚举来保持两个数组的一致性,方法如下:

enum foo {
    ZERO = 0,
    ONE,
    TWO,
};

int int_array[] = {
    [ZERO] = 0,
    [ONE] = 1,
    [TWO] = 2
};

char *str_array[] = {
    [ZERO] = "ZERO",
    [ONE] = "ONE",
    [TWO] = "TWO"
};

此代码对于c 编译良好,但在cpp 模块中使用时会引发以下错误。

expected primary-expression before ‘[’ token

两个数组声明中的每一行都有错误。这里有什么问题?

【问题讨论】:

  • 简答,这是无效的c++

标签: c++ enums


【解决方案1】:

C++ 不支持所谓的指示符。 C 中允许的初始化。

所以编译器发出一条消息。

在 C++ 中,您必须按照以下方式编写

int int_array[] = { 0, 1, 2 };

const char *str_array[] = { "ZERO", "ONE", "TWO" }; 
^^^^^^

【讨论】:

  • 不是 GCC 扩展吗?还是C99及以上标准?我说的是 C,顺便说一句。
  • @CoolGuy 指示符初始化是在 C99 中引入的。也许 GCC 也有自己的语言扩展。我不知道。
  • @CoolGuy:gcc 在 C99 发布之前将其作为扩展引入 struct 成员和数组。它被添加到标准中,语法与 C99 略有不同。未添加到标准中的是指定索引范围。见gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/…
【解决方案2】:

这不是 C++ 的有效语法。您可以通过以下方式初始化数组:

int int_array[] = { 0, 1, 2 };

char *str_array[] = {
    "ZERO",
    "ONE",
    "TWO"
};

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 2013-08-29
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多