C ++ Variable mit dem gleichen Namen, Kontext: global und privat,
Frage
Im folgenden Code, g ++ gibt diese Fehlermeldung:
1.cpp: In Memberfunktion void W::test()':
1.cpp:6: error:
int F :: Glob‘ist privat
1.cpp: 19: Fehler: in diesem Kontext
Aber sollte nicht die global deklariert Variable ‚Glob‘ hier verwendet werden, statt der "privaten" "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()
{
}
Lösung
Variablen und Funktionen werden über Scoping-Regeln zugegriffen wird, nicht visbility Regeln. Da F::glob
die glob
im Rahmen W::test()
ist, wird es verwendet. Allerdings hat W::test()
keinen Zugriff auf F::glob
, und ein Fehler gemeldet. Der Compiler tut nicht für ::glob
überprüfen, weil etwas anderes es in scope "Priorität" vorausgeht (nicht sicher, für die genaue Bezeichnung).
Andere Tipps
Private glob Schatten der globalen glob, so dass der Fehler korrekt Verwenden :: Glob die globale Variable zugreifen, wenn u Absicht globalen Variable zu verwenden,
Sie können versuchen, stattdessen mit ::glob--;
. So können Sie den Compiler sagen dem globalen Namensraum zu verwenden.
Klasse Mitglied wird hier verwendet werden, globalen Variable Verwendung :: operator zugreifen zu können.