2013-07-09 98 views
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:'{';我怎樣才能給這個結構裏面的結構體賦值?

回答

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()

+0

addr.bytes =(bytes_t){192,168,0,96};不適用於MSVC 2010. – Huy

+0

感謝您的及時回覆,Rasen。 – user2565838

+0

它不起作用,同樣的錯誤出現... – user2565838

相關問題