结构数组 - 初始化错误 [英] Array of structs - initialization errors
问题描述
我在这里(使用MFC)创建一些数据结构,在MS Visual C ++ 6.0中编译(是的,它是旧的)。
< pre class =lang-cpp prettyprint-override>
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会为每个数组元素弹出编译错误:
$ b b
device.cpp(78):错误C2440:'initializing':无法从'struct SOpcodeData'转换为'unsigned char'
Aparently
它在Visual Studio 2010和它的工作完美。但我需要使用VC6构建它。
我试图在数组初始化中显式转换为struct类型,但这是多余的,没有解决任何东西。任何其他想法?
我们找出了另一个解决方案, define :使用构造函数初始化数据结构。 Sorta像这样:
struct SOpcodeData
{
SOpcodeData byDataType,const DWORD dwMinValue,const DWORD dwMaxValue,const WORD wRepeat)
:m_byDataType(byDataType),m_dwMinValue(dwMinValue),m_dwMaxValue(dwMaxValue),m_wRepeat(wRepeat)
{}
BYTE m_byDataType;
DWORD m_dwMinValue;
DWORD m_dwMaxValue;
WORD m_wRepeat;
};
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_WORD,MY_DWORD};
感谢大家!
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?
We've figured out another solution, without using #define
: using a constructor to initialize the data structures. Sorta like this:
struct SOpcodeData
{
SOpcodeData (const BYTE byDataType, const DWORD dwMinValue, const DWORD dwMaxValue, const WORD wRepeat)
: m_byDataType(byDataType), m_dwMinValue(dwMinValue), m_dwMaxValue(dwMaxValue), m_wRepeat(wRepeat)
{}
BYTE m_byDataType;
DWORD m_dwMinValue;
DWORD m_dwMaxValue;
WORD m_wRepeat;
};
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_WORD, MY_DWORD };
Thanks to everyone!
这篇关于结构数组 - 初始化错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!