我正在重建一个库,并在代码的这一部分中发现了这个错误:
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
进行编译。
提前谢谢。
答案 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"
块中。