#include <iostream>
#include <stdint.h>
using namespace std;
union ipv4 {
struct bytes{
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
} bytes;
uint32_t int32;
};
int main( int argc, char ** argv ) {
union ipv4 addr;
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,
addr.int32);
getchar();
return 0;
}
错误:c:\ users \ yayun.xie \ documents \ satmap \ c ++ onlinematerial \ exercise files \ chap05 \ union.cpp(18):error C2059:语法错误:'{';
答案 0 :(得分:1)
如果你输出结构声明不合并,你可以写这样的代码(这个片段使用复合文字,这是C99的功能C ++禁止)
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;
或者,与声明初始化
一起进行ipv4 addr = { .bytes = { 192, 168, 0, 96 } };
bytes
是第一个联合字段,因此您可以退出.bytes =
并只写
ipv4 addr = { { 192, 168, 0, 96 } };
使用C ++ 11的扩展初始化列表,这也是有效的:
addr.bytes = { 192, 168, 0, 96 };
顺便说一下,您忘记加入stdio.h
以使用printf()
和getchar()
。