Condividi tramite


Errore del compilatore C2061

errore di sintassi: identificatore 'identifier'

Il compilatore ha trovato un identificatore in cui non era previsto. Assicurarsi che identifier sia dichiarato prima di usarlo.

Un inizializzatore può essere racchiuso tra parentesi. Per evitare questo problema, racchiudere il dichiaratore tra parentesi o impostarlo come typedef.

Questo errore può anche essere causato quando il compilatore rileva un'espressione come argomento del modello di classe; usare typename per indicare al compilatore che è un tipo, come illustrato nell'esempio seguente:

L'esempio seguente genera l'errore 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
}

Per risolvere l'errore con template<A a> class C1{};, usare template <typename a> class C1 {};
Per risolvere il problema con using Type1 = T::Type;, usare using Type1 = typename T::Type;
Per risolvere il problema con alignof(x), sostituire l'argomento con il tipo di x. In questo caso, int o decltype(x);

C2061 può verificarsi se si passa un nome di istanza 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
}