我需要在结构中声明一个如下定义的联合:
struct MyStruct
{
int m_DataType;
DWORD m_DataLen;
union theData
{
char m_Buff [_MAX_PATH];
struct MyData m_myData;
} m_Data;
};
最初,我尝试按如下方式访问union数据(在添加m_Data声明之前):
MyStruct m_myStruct;
char* pBuff = m_myStruct.theData::m_Buff;
这编译但返回到pBuff指向MyStruct结构的开头的指针,这导致我覆盖m_DataType&当我以为我正在写m_Buff缓冲区时,m_DataLength成员。
我正在使用Visual Studio 2008.任何人都可以解释这种意外行为吗?感谢。
答案 0 :(得分:2)
你应该写:
char *pBuff = m_myStruct.m_Data.m_Buff;
我希望我知道它是如何编写的。
答案 1 :(得分:2)
它不应该编译。 GCC barfs在此代码中使用:)
union.cpp:17: error: ‘MyStruct::theData’ is not a base of ‘MyStruct’
答案 2 :(得分:1)
你的意思不是吗?
char* pBuff = m_myStruct.m_Data.m_Buff;