Я создаю здесь некоторые структуры данных (с помощью 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: «инициализация»: невозможно преобразовать «struct SOpcodeData» в «unsigned char»
Нет доступного пользовательского оператора преобразования, который может выполнить это преобразование, или оператор не может быть вызван
Очевидно, он ошибочно принимает весь тип структуры за первое поле структуры, которое является BYTE (или unsigned char для тех, кто не привык к MFC).
Пробовал на Visual Studio 2010, работает отлично. Но мне нужно построить его с помощью VC6.
Я пытался явно привести тип структуры к типу структуры внутри инициализации массива, но это избыточно и ничего не решает. Любые другие идеи?