首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++ -不支持重要的指定初始化程序

c++ -不支持重要的指定初始化程序
EN

Stack Overflow用户
提问于 2017-08-14 16:24:46
回答 1查看 3.2K关注 0票数 0

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

代码语言:javascript
运行
复制
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文件,我正在通过cmakec++中编译它。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2017-08-14 16:35:53

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

代码语言:javascript
运行
复制
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++项目中使用它。如果不是,将库的#includes放置在extern "C"块中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45678893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档