我现在感觉真的很愚蠢,因为我已经快两年没有做任何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,但我不知道嵌套结构的语法应该是什么样子。
发布于 2013-02-16 13:20:33
我非常确定这个链接答案中的样式只涉及注释掉所有的.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,
},
},
};https://stackoverflow.com/questions/14907187
复制相似问题