Delen via


Compilerfout C2061

syntaxisfout: identifier 'identifier'

Opmerkingen

De compiler heeft een id gevonden waar deze niet werd verwacht. Zorg ervoor dat identifier is gedeclareerd voordat u het gebruikt.

Een initialisatiefunctie kan tussen haakjes staan. Om dit probleem te voorkomen, plaatst u de declaratie tussen haakjes of maakt u het een typedef.

Deze fout kan ook worden veroorzaakt wanneer de compiler een expressie detecteert als een klassesjabloonargument; gebruik de typenaam om de compiler aan te geven dat het een type is, zoals wordt weergegeven in het volgende voorbeeld:

Voorbeelden

In het volgende voorbeeld wordt C2061 gegenereerd:

// 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
}

Als u de fout wilt oplossen met template<A a> class C1{};, gebruikt u template <typename a> class C1 {};
Gebruik using Type1 = typename T::Type; om het probleem met using Type1 = T::Type; op te lossen.
Om het probleem met alignof(x) op te lossen, vervang het argument door het type van x. In dit geval, int of decltype(x);

C2061 kan optreden als u een exemplaarnaam doorgeeft aan 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
}