使用union标记引用结构内的联合会给出错误的地址

时间:2010-04-13 03:37:13

标签: c++ nested structure unions

我需要在结构中声明一个如下定义的联合:

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.任何人都可以解释这种意外行为吗?感谢。

3 个答案:

答案 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;