Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
'identifier' : não é um nome de classe ou namespace
A sintaxe da linguagem requer um nome de classe, estrutura, união ou namespace aqui.
Este erro pode ocorrer quando você usa um nome que não foi declarado como uma classe, estrutura, união ou namespace na frente de um operador de escopo. Para corrigir esse problema, declare o nome ou inclua o cabeçalho que declara o nome antes de ser usado.
C2653 também pode ocorrer se tentar definir um namespace composto, ou seja, um namespace que contém um ou mais nomes de namespace aninhados dentro de um escopo. Definições de namespace composto não são permitidas em C++ antes de C++17. Namespaces compostos são suportados a partir do Visual Studio 2015 Atualização 3, quando o utilizador especifica a opção /std:c++latest
do compilador. A partir do Visual Studio 2017 versão 15.5, o compilador oferece suporte a definições de namespace composto quando a /std:c++17
opção ou posterior é especificada.
Exemplos
Este exemplo gera C2653 porque um nome de escopo é usado, mas não declarado. O compilador espera um nome de classe, estrutura, união ou namespace antes de um operador de escopo (::).
// 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
No código que não é compilado para C++17 ou padrões posteriores, os namespaces aninhados devem usar uma declaração de namespace explícita em cada nível de aninhamento:
// 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;
}