Kompilieren die Fehlermeldung 'nullptr' nicht deklarierter Bezeichner
Ich bin tring zu kompilieren eine source, die mit Visual Studio 2008 Express, aber ich bin immer diese Fehlermeldung:
Error C2065: 'nullptr' undeclared identifier.
Mein code:
if (Data == nullptr)
{
show("Data is null");
return 0;
}
Las ich bei google, sollte ich ein upgrade auf Visual Studio 2010, aber ich will nicht zu tun, weil der 2008 intelisense. Kann dieser repariert oder ersetzt werden?
nullptr
ist eine neuere Sprache-Funktion und es sieht aus wie Ihre compiler nur nicht unterstützt. Die alte war, dies zu tun, war zu prüfen, gegen 0, aber das ist nicht ganz so typesafe. Auch möchten Sie vielleicht, um diese zu Lesen en.wikibooks.org/wiki/More_C%2B%2B_Idioms/nullptrSie können nur
nullptr
in Visual Studio 2010 und höher, es ist ein C++11 feature.Was ist der Unterschied zwischen intelisense in VS2008 und VS2010?
Sie können ein upgrade auf VS2010, wie/warum hätte das für Auswirkungen auf Ihre Nutzung von Intellisense?
Sie wissen, dass VS2008 nicht unterstützen
nullptr
. Sie wissen, die Lösung ist die Verwendung eines neueren Compilers. Und doch Sie wollen irgendwie einen Weg finden, ändern Sie die compiler ohne compiler ändern.InformationsquelleAutor VIclean | 2014-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Fehler, die Sie erhalten, weil der compiler nicht erkennt, die
nullptr
Schlüsselwort. Dies ist, weilnullptr
eingeführt wurde in einer späteren version von visual studio als die, die Sie verwenden.Es gibt 2 Wege die Sie gehen können, darum, diese arbeiten in einer älteren version. Eine Idee stammt von Scott Meyers c++ - Buch, wo er schlägt die Schaffung einer Kopfzeile mit einer Klasse, die emuliert
nullptr
wie diese:Diese Weise müssen Sie nur bedingt schließen Sie die Datei basiert auf der version von msvc
Dies hat den Vorteil der Verwendung des gleichen Schlüsselworts und macht ein Upgrade auf eine neue compiler-ein gutes Stück leichter (und bitte nicht aktualisieren, wenn Sie können). Wenn Sie nun kompilieren Sie mit einem neueren compiler dann Ihren benutzerdefinierten code nicht benutzt und Sie nur mit der c++ - Sprache, ich fühle mich, als ob dies wichtig für die Zukunft.
Wenn Sie nicht wollen, dass die Methode, die Sie gehen könnte mit etwas, das emuliert die alten C-Stil-Ansatz (
#define NULL ((void *)0)
), wo man ein makro machen fürNULL
wie diese:Beachten, dass dies nicht ganz das gleiche wie
NULL
wie in C, für weitere Diskussion, siehe diese Frage: Warum sind NULL-Zeiger definiert sich anders als in C und C++?Die Nachteile zu diesem ist, dass Sie den Quellcode ändern, und es ist nicht typesafe wie
nullptr
. So verwenden Sie diese mit Vorsicht, kann es ein paar subtile Fehler, wenn Sie nicht vorsichtig sind, und es war diese subtile bugs, dass motiviert die Entwicklung vonnullptr
in den ersten Platz.InformationsquelleAutor shuttle87
nullptr
ist Teil von C++11 in C++03 verwenden Sie einfach0
:InformationsquelleAutor Paul Evans