0
#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: syntax error: '{';

4

1 回答 1

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是 union 的第一个字段,所以你可以退出.bytes =并只写

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

使用 C++11 的扩展初始化列表,这也是有效的:

addr.bytes = { 192, 168, 0, 96 };

顺便说一句,你忘了包括stdio.h使用printf()and getchar()

于 2013-07-09T19:50:42.540 回答