12

次のサンプル コードは、Visual C++ で正常にコンパイルされます。

class Test {
private:
    struct {
        struct {
            int privateData;
        };
    };
};

int main(int, char **)
{
    Test test;
    test.privateData = 0;
    return 0;
}

しかし、なぜ?メンバーはそのコンテナーのコンテナーのようにprivateDataなっているはずなので、関数 main にアクセスできないため、コンパイラ エラーが発生することが予想されます。private名前のない構造体が公式の C++ の一部ではないことは知っていますが、この設計は馬鹿げています。

ちなみに、私もに変更しようとprivateprotectedましstructunion: コンパイラは、別の匿名構造体またはユニオン内にネストされている匿名構造体およびユニオンのアクセス修飾子を受け入れることを拒否しているようです。

誰かがこの機能を説明できますか?

4

1 に答える 1

6

はい、バグです。Microsoft はそのことを認めました。フィードバック レポートはこちらです。

現在、バグは「修正されない」状態にあり、いつ修正されるかは不明です。Edison Design Group によって作成された、Visual Studio に組み込まれている IntelliSense パーサーは、これについて不平を言っています。赤い波線とメッセージが表示されます。

エラー: メンバー "Test.privateData" (10 行目で宣言) にアクセスできません

于 2013-01-10T00:43:44.160 に答える