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?
Since you insist on using a compiler with lots and lots of known bugs, you will need an ugly workaround:
We've figured out another solution, without using
#define
: using a constructor to initialize the data structures. Sorta like this:Thanks to everyone!