C2653- oder C2039-Fehler, wenn Sie versuchen, auf eine Funktion aus der STD C++-Bibliothek zu verweisen
Dieser Artikel enthält Informationen zum Beheben des C2653- oder C2039-Fehlers, der auftritt, wenn Sie aus der STD C++-Bibliothek auf eine Funktion verweisen.
Originalversion des Produkts: Visual C++
Ursprüngliche KB-Nummer: 243444
Problembeschreibung
Der Versuch, mithilfe des Namespaces std (z. B. ) auf eine Funktion aus dem STD C++-Bibliotheksheader <cstdlib> zu verweisen, bewirkt, dass der Compiler eine C2653- oder C2039-Fehlermeldung ausgibt (je nachdem, std::exit(0)ob der Namespace std an dem Punkt definiert ist, an dem der Fehler ausgegeben wird).
Ursache
<cstdlib> definiert den Namespace stdnicht. Dies widerspricht der Visual C++-Dokumentation, in der Folgendes steht:
Schließen Sie den Standardheader <cstdlib> ein, um den Standardheader <stdlib.h> effektiv in den std Namespace einzuschließen.
Lösung
Um das Problem zu umgehen, platzieren Sie das #include <cstdlib> Objekt im Namespace std.
Weitere Informationen
Wenn Sie versuchen, Folgendes zu kompilieren, zeigt der Compiler den folgenden Fehler an:
Fehler C2653: 'std' : ist kein Klassen- oder Namespacename
// Compile Options: /GX
#include <cstdlib>
void main()
{
std::exit(0);
}
Wenn Sie jedoch versuchen, Folgendes zu kompilieren, zeigt der Compiler den folgenden Fehler an:
Fehler C2039: 'exit' : ist kein Mitglied von 'std'
// Compile Options: /GX
#include <vector>
#include <cstdlib>
void main()
{
std::exit(0);
}
Im ersten Fall wird der C2653 angezeigt, da der Namespace std nicht definiert wurde. Im zweiten Fall wird der C2039 angezeigt, da der Namespace std (in der Kopfzeile <vector>) definiert wurde, die Funktion exit jedoch nicht Teil dieses Namespace ist. Um das Problem in beiden Fällen zu umgehen, schließen Sie einfach den #include <cstdlib> Namespace wie folgt in den Namespace stdein:
// Compile Options: /GX
namespace std
{
#include <cstdlib>
};
void main()
{
std::exit(0);
}