I'm creating some data structures here (with MFC), compiling in MS Visual C++ 6.0 (yes, it's old).
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 };
This code compiles with no errors or warnings. But when I try to create an array of my struct type...
SOpcodeData foo[] = { MY_BYTE, MY_BYTE, MY_WORD, MY_DWORD, MY_BYTE };
VC6 pops a compilation error for each array element:
device.cpp(78) : error C2440: 'initializing' : cannot convert from 'struct SOpcodeData' to 'unsigned char'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Aparently it is mistaking the whole struct type with the first struct field, which is a BYTE (or unsigned char for those who are not used to MFC).
Tried it on Visual Studio 2010 and it works perfectly. But I need to build it using VC6.
I've tried to explicit cast to struct type inside array initialization, but that's redundant and does not solved anything. Any other ideas?