将带有结构初始化和赋值的 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