Переменная C ++ с тем же именем, контекст: глобальный и приватный, - PullRequest
3 голосов
/ 30 декабря 2008

В следующем коде 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 ]

10 голосов
/ 30 декабря 2008

Переменные и функции доступны с использованием правил области видимости, а не правил видимости. Поскольку F::glob является glob в области действия W::test(), оно используется. Однако W::test() не имеет доступа к F::glob, и возникает ошибка. Компилятор не проверяет ::glob, потому что что-то еще предшествует ему в области «приоритет» (не точно для точного термина).

5 голосов
/ 30 декабря 2008

приватный глобус скрывает глобальный глобус, поэтому ошибка верна используйте :: glob для доступа к глобальной переменной, если вы намерены использовать глобальную переменную

4 голосов
/ 30 декабря 2008

Вместо этого вы можете попробовать ::glob--;. Таким образом, вы указываете компилятору использовать глобальное пространство имен.

2 голосов
/ 30 декабря 2008

Член класса будет использоваться здесь для доступа к глобальной переменной use :: operator.

...