结构数组 - 初始化错误 [英] Array of structs - initialization errors

查看:248
本文介绍了结构数组 - 初始化错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里(使用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

/ strong>它把第一个struct字段误认为整个struct类型,这是一个BYTE(或者没有用于MFC的那些人的unsigned char)。



它在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆