同じ名前、コンテキストを持つC ++変数:グローバルとプライベート、

StackOverflow https://stackoverflow.com/questions/399942

  •  29-08-2019
  •  | 
  •  

質問

は、次のコードでは、G ++は、このエラーを与えます: 1.cpp:メンバ関数void W::test()': 1.cpp:6: error:int Fで::グロブは」プライベートです 1.cpp:19:エラー:このコンテキスト内で

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

   #include <iostream.h>

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

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

    int main()
    {
    }
役に立ちましたか?

解決

変数と関数は、スコープ規則はなく、visbilityルールを使用してアクセスされます。 F::globglobの範囲でW::test()あるので、それが使用されています。しかし、W::test()F::globへのアクセス、およびエラーの結果を持っていません。何か他のものは、「優先順位」(正確な用語についてわからない)範囲でそれをpreceedsため、コンパイラは、::globをチェックしません。

他のヒント

民間グロブは、グローバルグロブをシャドウので、エラーが正しいです uは意図グローバル変数を使用する場合は、グローバル変数にアクセスするために::グロブを使う

あなたは代わりに::glob--;を使用して試すことができます。この方法では、グローバルネームスペースを使用するようにコンパイラに指示します。

クラスメンバーは、グローバル変数の使用::オペレータにアクセスするために、ここで使用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top