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

但是,这里不应该使用全局声明的变量“glob”,而不是“私有”“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

4 回答 4

10

使用范围规则而不是可见性规则访问变量和函数。因为F::globglob在 的范围内W::test(),所以使用。但是,W::test()无法访问F::glob,并导致错误。编译器检查,::glob因为在“优先级”范围内有其他东西在它之前(不确定确切的术语)。

于 2008-12-30T10:41:35.387 回答
5

私有 glob 会影响全局 glob,因此错误是正确的,如果您打算使用全局变量,请使用 ::glob 访问全局变量

于 2008-12-30T10:37:34.940 回答
4

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

于 2008-12-30T10:36:16.537 回答
2

此处将使用类成员,访问全局变量使用 :: 运算符。

于 2008-12-30T10:36:22.150 回答