将带有结构初始化和赋值的 C 代码移动到 c++ 编译器

Posted

技术标签:

【中文标题】将带有结构初始化和赋值的 C 代码移动到 c++ 编译器【英文标题】:Move C code with struct initialization and assignment to c++ compiler 【发布时间】:2014-01-24 09:06:22 【问题描述】:

为什么在 C++ 中声明结构时没有直接赋值? 我有以下不能与 C++ 编译器一起使用的 C 代码:

static const struct 
    struct structtype1 header;
    struct 
        struct structtype2 intf;
        struct structtype3  src;
      foo1, foo2;
  bar = 
    .header = 
        .byte1 = 0x23,
        .length = 12,
        .count1 = 4,
        .count2 = 4,
    ,
    .foo1= 
        .intf = 
            .data =  0x23,
            .len = 2,
            .ep = 3,
                ,
        .src= 
            .data =  0x21,
            .len = 4,
            .ep = 2,
        ,
        ,
        .foo2= 
        .intf = 
            .data =  0x17,
            .len = 11,
            .ep = 2,
                ,
        .src= 
            .data =  0x20,
            .len = 2,
            .ep = 1,
        ,
        ,
;

【问题讨论】:

指定初始化器是 C99 的一项功能,尚未移植到 C++。 你将不得不重构代码 哦,好吧,我不知道! 【参考方案1】:

你有两个选择:

1.为此使用构造函数

这将为成员定义值,但所有结构都相同

struct _pnt  int x,y,z;  _pnt()  x=0; y=0; z=0;  ;
_pnt p0,p1,p2;  // all points are initialized to (0,0,0)

2. 像往常一样使用定义它仍然适用于我使用的任何 C++ 编译器

我想这就是你想要的

不要忘记成员的顺序和声明中的一样!!!

struct _pnt  int x,y,z; ;
_pnt p0=0.0,0.0,0.0,
     p1=1.0,0.0,0.0,
     p2=0.0,1.0,0.0;

问题是你必须初始化所有成员,而不仅仅是一些!!!

【讨论】:

以上是关于将带有结构初始化和赋值的 C 代码移动到 c++ 编译器的主要内容,如果未能解决你的问题,请参考以下文章

将带有结构字段的结构从 c++ 返回到 c# pinvoke

C++ 全局 静态结构体变量的初始化

C++拷贝赋值与移动赋值函数

C++ 不能用初始值设定项列表初始化非聚合错误

将包含 int 和 int[] 的结构从 C# 编组到 C++

请说明结构体初始化数据赋值的几种方式