我正在重新构建一个库,并在代码的这一节中发现了这个错误:
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
文件,我正在通过cmake
在c++
中编译它。
提前谢谢你。
发布于 2017-08-14 16:35:53
等效的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
s放置在extern "C"
块中。
https://stackoverflow.com/questions/45678893
复制相似问题