看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《icetofux ()》之銘言: : 在 Code::Blocks + GCC 下可以正常編譯並執行,但在codepad.org的線上編譯卻出現 : 錯誤訊息(紅字部分): : error: ISO C++ prohibits anonymous structs : compilation terminated due to -Wfatal-errors. : 請問如果要避開這種錯誤且不改變上述存取方式,有可能做到嗎? 你要的這個功能 就如同錯誤訊息所講的 叫作 anonymous struct 目前並非C/C++的標準功能 (C++僅支援anonymous union) gcc 是透過 extension 的方式支援這個功能 請見 http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html : 問題2: : 我使用 Code::Blocks + GCC 來印出InfoA、InfoB與InfoC中每個元素的在記憶體中的位 : 址,發現是連續的,且與Array相同(當然這是一定的,因為用了union),想請問我能確 : 信InfoA、InfoB與InfoC無論在怎麼樣的狀況下,都是會被安排在連續的記憶體位址嗎? compiler 是有權力在 struct 內加入一些 padding 以符合 alignment 儘管在成員都是 char array 對大部份的 compiler 來說應該都是連續的 你可以用 #pragma pack 來要求 compiler 進行特定的 alignment : 因為程式中我想以Obj.InfoA的方式存取,然後最後再以 : fstream.write(Obj.Array, 14); : 的方式寫入外部檔案。 嗯,至少也把 14 改成 sizeof(Obj) 吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.15.163