具有相同名称的C ++变量,context:global和private,

时间:2008-12-30 10:30:54

标签: c++ private global

在以下代码中,g ++给出了以下错误: 1.cpp:在成员函数void W::test()': 1.cpp:6: error:中,int F :: glob'是私有的 1.cpp:19:错误:在此上下文中

但是,不应该全球声明 相反,变量'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()
    {
    }

4 个答案:

答案 0 :(得分:10)

使用范围规则访问变量和函数,而不是可见性规则。由于F::globglob范围内的W::test(),因此会使用它。但是,W::test()无法访问F::glob,并且会出现错误。编译器检查::glob,因为在“优先级”范围之前还有其他内容(对于确切的术语不确定)。

答案 1 :(得分:5)

private glob会影响全局glob,所以错误是正确的 如果你打算使用全局变量

,使用:: glob来访问全局变量

答案 2 :(得分:4)

您可以尝试使用::glob--;代替。这样就告诉编译器使用全局命名空间。

答案 3 :(得分:2)

这里将使用类成员来访问全局变量use :: operator。