Share via


Error del compilador C2061

error de sintaxis: identificador 'identificador'

El compilador ha encontrado un identificador donde no se esperaba. Asegúrese de que se declara identifier antes de usarlo.

Un inicializador puede ir entre paréntesis. Para evitar este problema, incluya el declarador entre paréntesis o haga que sea typedef.

Este error también podría deberse a que el compilador detecta una expresión como argumento de plantilla de clase; use typename para indicar al compilador que es un tipo, como se muestra en el ejemplo siguiente:

El ejemplo siguiente genera el error 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 el error con template<A a> class C1{};, use template <typename a> class C1 {};
Para resolver el problema con using Type1 = T::Type;, use using Type1 = typename T::Type;
Para resolver el problema con alignof(x), reemplace el argumento por el tipo de x. En este caso, int o decltype(x);

El error C2061 puede producirse si pasa un nombre de instancia a 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
}