我在这里创建了一些数据结构(使用 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”转换为“无符号字符”
没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符
Aparently将整个结构类型误认为是第一个结构字段,这是一个 BYTE(或者对于那些不习惯 MFC 的人来说是 unsigned char)。
在 Visual Studio 2010 上试过,效果很好。但我需要使用 VC6 构建它。
我尝试在数组初始化中显式转换为结构类型,但这是多余的,并没有解决任何问题。还有其他想法吗?