我在這裏(用MFC)創建一些數據結構,在MS Visual C++ 6.0中編譯(是的,它是舊的)。結構數組 - 初始化錯誤
struct SOpcodeData
{
BYTE m_byDataType;
DWORD m_dwMinValue;
DWORD m_dwMaxValue;
WORD m_wRepeat;
};
const BYTE DATA_U8 = 0;
const BYTE DATA_U16 = 1;
const BYTE DATA_U32 = 2;
SOpcodeData MY_BYTE = { DATA_U8, 0, UCHAR_MAX, 1 };
SOpcodeData MY_WORD = { DATA_U16, 0, USHRT_MAX, 1 };
SOpcodeData MY_DWORD = { DATA_U32, 0, UINT_MAX, 1 };
此代碼編譯沒有錯誤或警告。但是,當我嘗試創建我的結構類型的數組...
SOpcodeData foo[] = { MY_BYTE, MY_BYTE, MY_WORD, MY_DWORD, MY_BYTE };
VC6彈出一個編譯錯誤,每個數組元素:
device.cpp(78):錯誤C2440:初始化':不能轉換從‘結構SOpcodeData’到‘無符號字符’
無可用的能夠執行這種轉換,或操作員不能被稱爲用戶定義的轉換運算符
Aparently它錯誤地將整個結構類型與第一個結構字段(對於不用於MFC的用戶)的字節(或無符號字符)錯誤結合。
在Visual Studio 2010上嘗試過它,它完美地工作。但我需要使用VC6來構建它。
我試圖顯式強制轉換爲數組初始化內部的結構類型,但這是多餘的,並沒有解決任何問題。任何其他想法?
謝謝!它解決了。完美編譯。 :-) 就我個人而言,我不會在VC6上編譯,但我必須。問候! – Taschetto 2012-07-19 14:20:17
該解決方法應該是有效的,但我不認爲這是一個bug - 數組初始化列表通常不接受其他變量來初始化數組元素,除了可能的內置類型(這可能只是一個常見的擴展 - 我不記得標準要說些什麼,所以我可能會誤解)。 – twalberg 2012-07-19 14:21:03
我也不瞭解標準,但是使用非內置類型的數組初始化在Visual Studio 2010中工作得很好。 – Taschetto 2012-07-19 14:44:12