gpt4 book ai didi

c++ - 结构数组 - 初始化错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:53 24 4
gpt4 key购买 nike

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

显然它把整个结构类型误认为是第一个结构字段,它是 BYTE(对于不习惯 MFC 的人来说是 unsigned char)。

在 Visual Studio 2010 上试过,效果很好。但我需要使用 VC6 构建它。

我曾尝试在数组初始化中显式转换为结构类型,但这是多余的,并没有解决任何问题。还有其他想法吗?

最佳答案

由于您坚持使用具有大量已知错误的编译器,因此您将需要一个丑陋的解决方法:

#define MY_BYTE_CONTENT  { DATA_U8,   0,  UCHAR_MAX,  1 }
#define MY_WORD_CONTENT { DATA_U16, 0, USHRT_MAX, 1 }
#define MY_DWORD_CONTENT { DATA_U32, 0, UINT_MAX, 1 }

SOpcodeData MY_BYTE = MY_BYTE_CONTENT;
SOpcodeData MY_WORD = MY_WORD_CONTENT;
SOpcodeData MY_DWORD = MY_DWORD_CONTENT;

SOpcodeData foo[] = { MY_BYTE_CONTENT, MY_BYTE_CONTENT, MY_WORD_CONTENT, MY_DWORD_CONTENT, MY_BYTE_CONTENT };

关于c++ - 结构数组 - 初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com