Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
'identifier' : není název třídy nebo oboru názvů.
Poznámky
Syntaxe jazyka vyžaduje název třídy, struktury, sjednocení nebo oboru názvů.
K této chybě může dojít, když před operátorem oboru použijete název, který nebyl deklarován jako třída, struktura, sjednocení nebo obor názvů. Chcete-li tento problém vyřešit, deklarujte název nebo vložte hlavičku, která před jejím použití deklaruje název.
C2653 je také možné, pokud se pokusíte definovat složený obor názvů, obor názvů, který obsahuje jeden nebo více názvů vnořených oborů názvů. V jazyce C++ před C++17 nejsou povoleny definice složeného oboru názvů. Složené obory názvů se podporují počínaje sadou Visual Studio 2015 Update 3 při zadávání možnosti kompilátoru /std:c++latest . Od verze 15.5 sady Visual Studio 2017 kompilátor podporuje definice složeného oboru názvů, pokud je zadána možnost /std:c++17 nebo pozdější.
Příklady
Tento příklad vygeneruje C2653, protože se používá název oboru, ale není deklarován. Kompilátor očekává před operátorem oboru třídu, strukturu, sjednocení nebo obor názvů (::).
// 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
V kódu, který není zkompilován pro standardy C++17 nebo novější, musí vnořené obory názvů používat explicitní deklaraci oboru názvů na každé úrovni vnoření:
// 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;
}