在以下代码中,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()
{
}
答案 0 :(得分:10)
使用范围规则访问变量和函数,而不是可见性规则。由于F::glob
是glob
范围内的W::test()
,因此会使用它。但是,W::test()
无法访问F::glob
,并且会出现错误。编译器不检查::glob
,因为在“优先级”范围之前还有其他内容(对于确切的术语不确定)。
答案 1 :(得分:5)
private glob会影响全局glob,所以错误是正确的 如果你打算使用全局变量
,使用:: glob来访问全局变量答案 2 :(得分:4)
您可以尝试使用::glob--;
代替。这样就告诉编译器使用全局命名空间。
答案 3 :(得分:2)
这里将使用类成员来访问全局变量use :: operator。