3

次のコードでは、g++ は次のエラーを返します: 1.cpp: In member function void W::test()': 1.cpp:6: error:int F::glob' is private 1.cpp:19: error: within this context

しかし、「プライベート」「グロブ」の代わりに、グローバルに宣言された変数「グロブ」をここで使用すべきではありませんか?

   #include <iostream.h>

    int glob;
    class F
    {
        int glob;
        public:
        void readIt()
        {
            cin >> glob;
        }
    };

    class W : public F
    {
        public:
            void test()
            {
                glob--;
            }
    };

    int main()
    {
    }
4

4 に答える 4

10

変数と関数は、可視性ルールではなく、スコープ ルールを使用してアクセスされます。F::globglobのスコープ内にあるためW::test()、使用されます。ただし、 にW::test()はアクセスできずF::glob、エラーが発生します。スコープの「優先順位」で他の何かが先行するため、コンパイラはチェックしません(正確な用語については不明です)。::glob

于 2008-12-30T10:41:35.387 に答える
5

プライベート グロブはグローバル グロブをシャドウするため、エラーは正しいです。グローバル変数を使用する場合は、::glob を使用してグローバル変数にアクセスします。

于 2008-12-30T10:37:34.940 に答える
4

::glob--;代わりに使用してみることができます。このようにして、コンパイラにグローバル名前空間を使用するように指示します。

于 2008-12-30T10:36:16.537 に答える
2

ここではクラス メンバーが使用され、グローバル変数にアクセスするには :: 演算子を使用します。

于 2008-12-30T10:36:22.150 に答える