Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何在这里为union内部的结构赋值? #包括 #包括 使用名称空间std; 联合ipv4{ 结构字节{ uint8_t a; uint8_t b; uint8_t c; uint8_t d; }字节; uint32_t int32; }; int main(int argc,字符**argv){ 联合ipv4地址; addr.bytes={192,168,0,96}; printf(“%d.%d.%d.%d-(%08x)\n”, addr.bytes.a,addr.bytes.b,addr.bytes.c,addr.bytes.d, 地址int32); getchar(); 返回0; } 错误:Cy:\DyAs\StAdMax\C++ OnLimeMealIs\Actudio\Chp05\Cuult.CPP(18):错误C2059:语法错误:{,/St>>P/>P> >如果您将结构声明导出为联合,则可以这样编写代码(该片段使用C99的“特征C++”禁用的复合文本)_C++_Visual Studio 2012_Struct_Unions - Fatal编程技术网

我如何在这里为union内部的结构赋值? #包括 #包括 使用名称空间std; 联合ipv4{ 结构字节{ uint8_t a; uint8_t b; uint8_t c; uint8_t d; }字节; uint32_t int32; }; int main(int argc,字符**argv){ 联合ipv4地址; addr.bytes={192,168,0,96}; printf(“%d.%d.%d.%d-(%08x)\n”, addr.bytes.a,addr.bytes.b,addr.bytes.c,addr.bytes.d, 地址int32); getchar(); 返回0; } 错误:Cy:\DyAs\StAdMax\C++ OnLimeMealIs\Actudio\Chp05\Cuult.CPP(18):错误C2059:语法错误:{,/St>>P/>P> >如果您将结构声明导出为联合,则可以这样编写代码(该片段使用C99的“特征C++”禁用的复合文本)

我如何在这里为union内部的结构赋值? #包括 #包括 使用名称空间std; 联合ipv4{ 结构字节{ uint8_t a; uint8_t b; uint8_t c; uint8_t d; }字节; uint32_t int32; }; int main(int argc,字符**argv){ 联合ipv4地址; addr.bytes={192,168,0,96}; printf(“%d.%d.%d.%d-(%08x)\n”, addr.bytes.a,addr.bytes.b,addr.bytes.c,addr.bytes.d, 地址int32); getchar(); 返回0; } 错误:Cy:\DyAs\StAdMax\C++ OnLimeMealIs\Actudio\Chp05\Cuult.CPP(18):错误C2059:语法错误:{,/St>>P/>P> >如果您将结构声明导出为联合,则可以这样编写代码(该片段使用C99的“特征C++”禁用的复合文本),c++,visual-studio-2012,struct,unions,C++,Visual Studio 2012,Struct,Unions,或者,您也可以逐个指定字段 struct bytes_t { uint8_t a; uint8_t b; uint8_t c; uint8_t d; }; union ipv4 { bytes_t bytes; uint32_t int32; }; .... addr.bytes = (bytes_t){ 192, 168, 0, 96 }; 或者,通过声明初始化一次性完成 addr.bytes.a = 192; addr.bytes.

或者,您也可以逐个指定字段

struct bytes_t {
    uint8_t a;
    uint8_t b;
    uint8_t c;
    uint8_t d;
};

union ipv4 {
    bytes_t bytes;
    uint32_t int32;
};
....
    addr.bytes = (bytes_t){ 192, 168, 0, 96 };
或者,通过声明初始化一次性完成

addr.bytes.a = 192;
addr.bytes.b = 168;
addr.bytes.c = 0;
addr.bytes.d = 96;
bytes
是联合的第一个字段,所以您可以退出
。bytes=
并只写

ipv4 addr = { .bytes = { 192, 168, 0, 96 } };
对于C++11的扩展初始值设定项列表,这也是有效的:

ipv4 addr = { { 192, 168, 0, 96 } };

顺便说一下,您忘了包含
stdio.h
来使用
printf()
getchar()

addr.bytes=(bytes_t){192,168,0,96};不适用于MSVC 2010。感谢您的及时回复,Rasen。所有这些示例在g++和clang中都有效,并且编译时没有任何警告。如果第一个示例对MSVC无效,请尝试另一个示例。addr.bytes.a=192;addr.bytes.b=168;addr.bytes.c=0;addr.bytes.d=96;AFAIK,您不能在赋值操作中使用结构初始化C++11之前的定量(
addr.bytes=…
)。这就是原始代码无法编译的原因,也是分配单个字段的原因。
ipv4 addr = { { 192, 168, 0, 96 } };
addr.bytes = { 192, 168, 0, 96 };