Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
declaratie van 'id' verbergt globale declaratie
Opmerkingen
De declaratie van id in het lokale bereik verbergt de declaratie van de identieke id in het globale bereik. Deze waarschuwing laat u weten dat verwijzingen naar identifier in dit bereik worden omgezet in de lokaal gedeclareerde versie, niet de globale versie, wat mogelijk wel of niet uw bedoeling is. Over het algemeen raden we u aan het gebruik van globale variabelen te minimaliseren als een goede technische praktijk. Als u de vervuiling van de globale naamruimte wilt minimaliseren, raden we u aan een benoemde naamruimte te gebruiken voor globale variabelen.
Deze waarschuwing is nieuw in Visual Studio 2015, in Microsoft C++-compilerversie 18.00. Als u waarschuwingen van die versie van de compiler of hoger wilt onderdrukken tijdens het migreren van uw code, gebruikt u de optie /Wv:18 compiler.
Example
In het volgende voorbeeld wordt C4459 gegenereerd:
// C4459_hide.cpp
// compile with: cl /W4 /EHsc C4459_hide.cpp
int global_or_local = 1;
int main() {
int global_or_local; // warning C4459
global_or_local = 2;
}
Een manier om dit probleem op te lossen is door een naamruimte te maken voor uw globals, maar geen richtlijn te gebruiken using om die naamruimte binnen het bereik te brengen, zodat alle verwijzingen de ondubbelzinnige gekwalificeerde namen moeten gebruiken:
// C4459_namespace.cpp
// compile with: cl /W4 /EHsc C4459_namespace.cpp
namespace globals {
int global_or_local = 1;
}
int main() {
int global_or_local; // OK
global_or_local = 2;
globals::global_or_local = 3;
}