同じ名前、コンテキストを持つC ++変数:グローバルとプライベート、
質問
は、次のコードでは、G ++は、このエラーを与えます:
1.cpp:メンバ関数void W::test()':
1.cpp:6: error:
int Fで::グロブは」プライベートです
1.cpp:19:エラー:このコンテキスト内で
しかし、グローバルに宣言べきではありません 変数「グロブは」の代わりに、ここで使用すること "プライベート" "グロブ"?
の #include <iostream.h>
int glob;
class F
{
int glob;
public:
void readIt()
{
cin >> glob;
}
};
class W : public F
{
public:
void test()
{
glob--;
}
};
int main()
{
}
解決
変数と関数は、スコープ規則はなく、visbilityルールを使用してアクセスされます。 F::glob
がglob
の範囲でW::test()
あるので、それが使用されています。しかし、W::test()
はF::glob
へのアクセス、およびエラーの結果を持っていません。何か他のものは、「優先順位」(正確な用語についてわからない)範囲でそれをpreceedsため、コンパイラは、のは::glob
をチェックしません。
他のヒント
民間グロブは、グローバルグロブをシャドウので、エラーが正しいです uは意図グローバル変数を使用する場合は、グローバル変数にアクセスするために::グロブを使う
あなたは代わりに::glob--;
を使用して試すことができます。この方法では、グローバルネームスペースを使用するようにコンパイラに指示します。
クラスメンバーは、グローバル変数の使用::オペレータにアクセスするために、ここで使用されます。
所属していません StackOverflow