Переменная C ++ с тем же именем, контекст :глобальный и частный,
Вопрос
В следующем коде 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--;
вместо этого.Таким образом, вы указываете компилятору использовать глобальное пространство имен.
Здесь будет использоваться член класса для доступа к использованию глобальной переменной ::оператор.