Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
'identifier': non è un nome di classe o spazio dei nomi
Osservazioni:
La sintassi del linguaggio richiede qui una classe, una struttura, un'unione o un nome dello spazio dei nomi.
Questo errore può verificarsi quando si usa un nome che non è stato dichiarato come classe, struttura, unione o spazio dei nomi davanti a un operatore di ambito. Per risolvere questo problema, dichiarare il nome o includere l'intestazione che dichiara il nome prima che venga usato.
C2653 è anche possibile se si tenta di definire uno spazio dei nomi composto, uno spazio dei nomi contenente uno o più nomi di spazi dei nomi annidati dall'ambito. Le definizioni di spazio dei nomi composte non sono consentite in C++ prima di C++17. Gli spazi dei nomi composti sono supportati a partire da Visual Studio 2015 Update 3 quando si specifica l'opzione del /std:c++latest compilatore. A partire da Visual Studio 2017 versione 15.5, il compilatore supporta le definizioni di spazio dei nomi composte quando viene specificata l'opzione /std:c++17 o successiva.
Esempi
Questo esempio genera l'errore C2653 perché viene usato un nome di ambito ma non dichiarato. Il compilatore prevede un nome di classe, struttura, unione o spazio dei nomi prima di un operatore di ambito (::).
// 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
Nel codice non compilato per gli standard C++17 o versioni successive, gli spazi dei nomi annidati devono usare una dichiarazione di spazio dei nomi esplicita a ogni livello di annidamento:
// 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;
}