2008-12-30 131 views
3

在下面的代碼中,g ++給出了這個錯誤: 1.cpp:成員函數void W::test()': 1.cpp:6: error: int F :: glob'是私有的 1.cpp:19:error :在此範圍內C++變量具有相同的名稱,上下文:global和private,

但是,應該不是全局聲明的 變量'glob'在這裏使用,而是 的「private」「glob」?

#include <iostream.h> 

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

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

    int main() 
    { 
    } 

回答

10

變量和函數使用範圍規則,沒有規則visbility訪問。由於F::globW::test()範圍內的glob,因此使用它。但是,W::test()無權訪問F::glob,並出現錯誤。編譯器確實而不是檢查::glob,因爲在範圍「優先級」(不確定的確切名詞)中有其他內容。

4

您可以嘗試使用::glob--;來代替。這樣你告訴編譯器使用全局命名空間。

2

此處將使用類成員來訪問全局變量use :: operator。

5

私人水珠陰影全球水珠,這樣的錯誤是正確的 使用::水珠訪問全局變量如果u打算使用全局變量