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);
}