Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
"azonosító": nem osztály- vagy névtérnév
Megjegyzések
A nyelv szintaxisához itt osztály-, struktúra-, egyesítő- vagy névtérnevet kell megadni.
Ez a hiba akkor fordulhat elő, ha olyan nevet használ, amelyet nem deklaráltak osztályként, struktúráként, egyesítőként vagy névtérként egy hatókör-operátor előtt. A probléma megoldásához deklarálja a nevet, vagy adja meg a nevet deklaráló fejlécet a használat előtt.
A C2653 akkor is lehetséges, ha összetett névteret próbál definiálni, amely egy vagy több hatókörbe ágyazott névtérnevet tartalmaz. Az összetett névtérdefiníciók a C+++17 előtt nem engedélyezettek a C+++-ban. Az összetett névterek a Visual Studio 2015 3. frissítésétől kezdve támogatottak a /std:c++latest fordítóbeállítás megadásakor. A Visual Studio 2017 15.5-ös verziójától kezdve a fordító támogatja az összetett névtérdefiníciókat, ha meg van adva a /std:c++17 vagy újabb beállítás.
Példák
Ez a példa c2653-at hoz létre, mert a rendszer egy hatókörnevet használ, de nincs deklarálva. A fordító osztály-, struktúra-, egyesítő- vagy névtérnevet vár a hatókör-operátor (::)) előtt.
// 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
A C++17 vagy újabb szabványokhoz nem lefordított kódban a beágyazott névtereknek minden beágyazási szinten explicit névtérdeklarációt kell használniuk:
// 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;
}