0

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

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 样式初始化如下所示:

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但我不知道嵌套结构的语法应该是什么样子。

4

1 回答 1

1

我很确定该链接答案中的样式仅涉及注释掉所有.BLAH =部分。只要您以正确的顺序拥有所有字段,它就会很好地初始化。

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,
                },
        },
};
于 2013-02-16T05:20:33.260 回答