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.
erro de sintaxe: identificador 'identificador'
Observações
O compilador encontrou um identificador onde não era esperado. Certifique-se de que identifier está declarado antes de o utilizar.
Um inicializador pode ser colocado entre parênteses. Para evitar esse problema, coloque o declarador entre parênteses ou torne-o um typedefarquivo .
Este erro também pode ser causado quando o compilador deteta uma expressão como um argumento de modelo de classe; Use typename para dizer ao compilador que é um tipo, como mostrado no exemplo a seguir:
Exemplos
O exemplo a seguir gera C2061:
// C2061.cpp
// compile with: /std:c++17
template <A a> // C2061
class C1 {};
template <typename A a> // ok
class C2 {};
template <typename T>
class C3
{
// Both are valid since C++20
using Type1 = T::Type; // C2061
using Type2 = typename T::Type; // OK
};
int main()
{
int x;
unsigned a1 = alignof(x); // C2061
unsigned a2 = alignof(int); // OK
unsigned a3 = alignof(decltype(x)); // OK
}
Para resolver o erro com template<A a> class C1{};o , use template <typename a> class C1 {};
Para resolver o problema com using Type1 = T::Type;o , use using Type1 = typename T::Type;
Para resolver o problema com alignof(x), substitua o argumento pelo tipo de x. Neste caso, int ou decltype(x);
C2061 pode ocorrer se você passar um nome de instância para typeid:
// C2061b.cpp
// compile with: /clr
ref struct G
{
int i;
};
int main()
{
G ^pG = gcnew G;
System::Type ^ pType = typeid<pG>; // C2061
System::Type ^ pType2 = typeid<G>; // OK
}