首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++初始化嵌套结构

C++初始化嵌套结构
EN

Stack Overflow用户
提问于 2013-02-16 13:11:59
回答 1查看 1.7K关注 0票数 0

我现在感觉真的很愚蠢,因为我已经快两年没有做任何C/C++了,而我的工作让我在那段时间里一直在编写Java,现在我甚至记不住简单的东西,或者我记得用Java做这件事的方法……我有一些C代码,我正试图在C++中使用,但我遇到了一些不直接兼容的问题,比如结构初始化。结构定义如下所示:

代码语言:javascript
复制
typedef struct
{
    struct
    {
        uint8_t  StreamingInterfaceNumber;
        USB_Endpoint_Table_t DataINEndpoint;
        USB_Endpoint_Table_t DataOUTEndpoint;
    } Config;

    struct
    {
        uint8_t RESERVED;
    } State;
} USB_ClassInfo_MIDI_Device_t;

最初的C风格初始化如下所示:

代码语言:javascript
复制
USB_ClassInfo_MIDI_Device_t MIDI_Interface =
{
    .Config =
        {
            .StreamingInterfaceNumber = 1,
            .DataINEndpoint           =
                {
                    .Address          = MIDI_STREAM_IN_EPNUM,
                    .Size             = MIDI_STREAM_EPSIZE,
                    .Banks            = 1,
                },
            .DataOUTEndpoint           =
                {
                    .Address          = MIDI_STREAM_OUT_EPNUM,
                    .Size             = MIDI_STREAM_EPSIZE,
                    .Banks            = 1,
                },
        },
};

这显然在C++中不起作用。在C++中初始化结构的最佳方法是什么?我不想修改定义,因为它存在于我不维护的代码库中,而且我不想去修改它,所以我不想添加构造函数。我喜欢这里建议的样式https://stackoverflow.com/a/6182627/1609411,但我不知道嵌套结构的语法应该是什么样子。

EN

回答 1

Stack Overflow用户

发布于 2013-02-16 13:20:33

我非常确定这个链接答案中的样式只涉及注释掉所有的.BLAH =部分。只要你把所有的字段都按正确的顺序排列,它就会正常初始化。

代码语言:javascript
复制
USB_ClassInfo_MIDI_Device_t MIDI_Interface =
{
    /* .Config = */
        {
          /* .StreamingInterfaceNumber = */ 1,
          /* .DataINEndpoint           = */
                {
                    /* .Address          = */ MIDI_STREAM_IN_EPNUM,
                    /* .Size             = */ MIDI_STREAM_EPSIZE,
                    /* .Banks            = */ 1,
                },
          /* .DataOUTEndpoint           = */
                {
                    /* .Address          = */ MIDI_STREAM_OUT_EPNUM,
                    /* .Size             = */ MIDI_STREAM_EPSIZE,
                    /* .Banks            = */ 1,
                },
        },
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14907187

复制
相关文章

相似问题

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