c++ - 将具有结构初始化和赋值的 C 代码移至 C++ 编译器

标签 c++ c struct

为什么在 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,
        },
        },
};

最佳答案

你有两个选择:

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++ 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328535/

相关文章:

c++ - 初始化完成 opengl 支持可用

c++ - 使用堆栈实现的所有可能路径的 DFS 算法

c++ - '&' : illegal operation on bound member functions expression Thread

c++ - 使用 vector 中的对象排序

c - 重心坐标。 C 中点相对于凹多边形的谐波扭曲

c - 如何在 Debian 上编译 DOS 程序?

c - 从字节中选择一个范围的位

c - 如何使新结构与旧结构兼容?

c++ - 公共(public)结构继承私有(private)结构 C++

c++ - 如何使用匿名结构/union 编译 C 代码?