Переменная C ++ с тем же именем, контекст :глобальный и частный,

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

  •  29-08-2019
  •  | 
  •  

Вопрос

В следующем коде 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()
    {
    }
Это было полезно?

Решение

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

Другие советы

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

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

Здесь будет использоваться член класса для доступа к использованию глобальной переменной ::оператор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top