c ++ - 不支持非平凡的指定初始值设定项

时间:2017-08-14 16:24:46

标签: c++ c

我正在重建一个库,并在代码的这一部分中发现了这个错误:

enum fix_version {
    FIX_4_0,
    FIX_4_1,
    FIX_4_2,
    FIX_4_3,
    FIX_4_4,
    FIX_5_0,
    FIXT_1_1,
};

static const char *begin_strings[] = {
        [FIXT_1_1]  = "FIXT.1.1",
        [FIX_4_4]   = "FIX.4.4",
        [FIX_4_3]   = "FIX.4.3",
        [FIX_4_2]   = "FIX.4.2",
        [FIX_4_1]   = "FIX.4.1",
        [FIX_4_0]   = "FIX.4.0",
};

我收到的错误是:sorry, unimplemented: non-trivial designated initializers not supported。我已经看到了这个错误的其他示例,但是这些是来自另一个struct的初始值设定项,而这个是来自简单的char,所以我该如何解决这个问题呢?代码来自.c个文件,我正在c++cmake进行编译。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

等效的C ++代码如下所示:

enum fix_version {
    FIX_4_0,
    FIX_4_1,
    FIX_4_2,
    FIX_4_3,
    FIX_4_4,
    FIX_5_0,
    FIXT_1_1
};

static const char *begin_strings[] = {
        "FIX.4.0",
        "FIX.4.1",
        "FIX.4.2",
        "FIX.4.3",
        "FIX.4.4",
        0,
        "FIXT.1.1"
};

enum发生变化时,这当然有可能忘记修复阵列。但是C ++只是不支持指定的数组初始化器。

正如评论中已经解释的那样,更好的选择是将库保留为并使用C编译器进行编译。如果它根据需要使用extern "C"标题,则可以直接在C ++项目中使用它。如果没有,请将库的#include放在extern "C"块中。