[問題] 類別中的類別 與 物件的記憶體安排
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
N
問題(Question):
問題1:
我建立了下列的類別
union MyUnion
{
public:
unsigned char Array[14];
class
{
public:
unsigned char InfoA[2];
unsigned char InfoB[4];
unsigned char InfoC[8];
};
};
並於程式中希望藉由下列方式存取
MyUnion Obj;
Obj.Array[13] = 0x00;
Obj.InfoA[0] = 0x00;
Obj.InfoB[1] = 0x00;
Obj.InfoC[7] = 0x00;
在 Code::Blocks + GCC 下可以正常編譯並執行,但在codepad.org的線上編譯卻出現
錯誤訊息(紅字部分):
error: ISO C++ prohibits anonymous structs
compilation terminated due to -Wfatal-errors.
請問如果要避開這種錯誤且不改變上述存取方式,有可能做到嗎?
問題2:
我使用 Code::Blocks + GCC 來印出InfoA、InfoB與InfoC中每個元素的在記憶體中的位
址,發現是連續的,且與Array相同(當然這是一定的,因為用了union),想請問我能確
信InfoA、InfoB與InfoC無論在怎麼樣的狀況下,都是會被安排在連續的記憶體位址嗎?
因為程式中我想以Obj.InfoA的方式存取,然後最後再以
fstream.write(Obj.Array, 14);
的方式寫入外部檔案。
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.212.238
→
05/10 12:03, , 1F
05/10 12:03, 1F
→
05/10 12:04, , 2F
05/10 12:04, 2F
推
05/10 12:28, , 3F
05/10 12:28, 3F
→
05/10 15:59, , 4F
05/10 15:59, 4F
→
05/10 17:12, , 5F
05/10 17:12, 5F
→
05/10 17:12, , 6F
05/10 17:12, 6F
→
05/10 17:13, , 7F
05/10 17:13, 7F
→
05/10 18:41, , 8F
05/10 18:41, 8F
→
05/10 18:45, , 9F
05/10 18:45, 9F
→
05/10 18:46, , 10F
05/10 18:46, 10F
推
05/10 18:49, , 11F
05/10 18:49, 11F
→
05/10 18:56, , 12F
05/10 18:56, 12F
→
05/10 18:56, , 13F
05/10 18:56, 13F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):