0

私はこのコードをWindows8SDKでコンパイルしようとしています:

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':式としてのこの型の不正使用

それを修正する方法はありますか?

このコードをWindowsSDK7で正常にコンパイルしましたが、エラーはWindows8SDKでのみ発生します。

4

2 に答える 2

0

試してみてくださいStMyStruct::red

また、主にCを開発するときに使用される、は必要ありませんtypedef。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とVisualStudioを使用してクリーンにコンパイルします。

于 2012-11-29T09:18:26.713 に答える