Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
'Identifier': ist kein Klassen- oder Namespacename.
Für die Sprachsyntax ist hier ein Klassen-, Struktur-, Vereinigungs- oder Namespacename erforderlich.
Dieser Fehler kann auftreten, wenn Sie einen Namen verwenden, der nicht als Klasse, Struktur, Union oder Namespace vor einem Bereichsoperator deklariert wurde. Um dieses Problem zu beheben, deklarieren Sie den Namen, oder schließen Sie den Header ein, der den Namen deklariert, bevor es verwendet wird.
C2653 ist auch möglich, wenn Sie versuchen, einen zusammengesetzten Namespace zu definieren, einen Namespace, der einen oder mehrere bereichsverschachtelte Namespacenamen enthält. Zusammengesetzte Namespacedefinitionen sind in C++ vor C++17 nicht zulässig. Zusammengesetzte Namespaces werden ab Visual Studio 2015 Update 3 unterstützt, wenn Sie die /std:c++latest
Compileroption angeben. Ab Visual Studio 2017 Version 15.5 unterstützt der Compiler zusammengesetzte Namespacedefinitionen, wenn die Option /std:c++17
oder eine spätere angegeben wird.
Beispiele
In diesem Beispiel wird C2653 generiert, da ein Bereichsname verwendet, aber nicht deklariert wird. Der Compiler erwartet einen Klassen-, Struktur-, Union- oder Namespacenamen vor einem Bereichsoperator (::)).
// C2653.cpp
// compile with: /c
class yy {
void func1(int i);
};
void xx::func1(int m) {} // C2653, xx is not declared
void yy::func1(int m) {} // OK
In Code, der nicht für C++17- oder höher-Standards kompiliert wird, müssen geschachtelte Namespaces eine explizite Namespacedeklaration auf jeder Schachtelungsebene verwenden:
// C2653b.cpp
namespace a::b {int i;} // C2653 prior to Visual Studio 2015 Update 3,
// C2429 thereafter. Use /std:c++17 or /std:c++latest to fix.
namespace a { // Use this form for conformant code under /std:c++14 (the default)
namespace b { // or when using compilers before Visual Studio 2015 update 3.
int i;
}
}
int main() {
a::b::i = 2;
}