在struct中使用enum时的C ++错误编译C2275

时间:2012-11-29 09:12:31

标签: c++ compilation struct typedef

我尝试使用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中发生错误。

2 个答案:

答案 0 :(得分:0)

尝试StMyStruct::red

另外,你不需要在C ++中开发C时主要使用的typedef,你可以直接引用结构和类名。

答案 1 :(得分: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为我编译干净。