0

我尝试使用 Windows 8 SDK 编译此代码:

typedef struct {
    enum { red, blue, green } eColor;
    /* other params here */
} StMyStruct;

void Myfunction(StMyStruct *pst) 
{
    if (pst->eColor==StMyStruct.red) {
        /* some code here */
    }

}

但是如果 pst->eColor==StMyStruct.red,我会在线收到此错误:

错误 C2275:“StMyStruct”:非法使用此类型作为表达式

知道如何解决吗?

我使用 Windows SDK 7 成功编译了此代码,错误仅发生在 Windows 8 SDK 上。

4

2 回答 2

0

试试StMyStruct::red

此外,您不需要typedef, 主要用于开发 C —— 在 C++ 中,您可以直接引用结构和类名。

于 2012-11-29T09:15:16.910 回答
0

我不确定为什么用 SDK7 编译,但我认为枚举值是静态成员,StMyStruct所以应该通过StMyStruct::

typedef struct {
    enum { red, blue, green } eColor;
} StMyStruct;

void Myfunction(StMyStruct *pst) 
{
    if (pst->eColor==StMyStruct::red) {
        /* some code here */
    }
}

使用 GCC 和 Visual Studio 为我干净地编译。

于 2012-11-29T09:18:26.713 回答