Compilerfehler C2061

Syntaxfehler: Bezeichner 'Identifier'

Der Compiler hat einen Bezeichner gefunden, bei dem er nicht erwartet wurde. Stellen Sie sicher, dass sie deklariert ist, identifier bevor Sie sie verwenden.

Ein Initialisierer kann durch Klammern eingeschlossen werden. Um dieses Problem zu vermeiden, schließen Sie den Deklarator in Klammern ein, oder machen Sie es zu einem typedef.

Dieser Fehler kann auch verursacht werden, wenn der Compiler einen Ausdruck als Klassenvorlagenargument erkennt; verwenden Sie den Typnamen , um den Compiler anzuweisen, dass es sich um einen Typ handelt, wie im folgenden Beispiel gezeigt:

Im folgenden Beispiel wird C2061 generiert:

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

Um den Fehler mit template<A a> class C1{};zu beheben, verwenden Sie template <typename a> class C1 {};
Um das Problem mit using Type1 = T::Type;zu beheben, verwenden Sie using Type1 = typename T::Type;
Um das Problem mit alignof(x)zu beheben, ersetzen Sie das Argument durch den Typ von x. In diesem Fall oder intdecltype(x);

C2061 kann auftreten, wenn Sie einen Instanznamen an typeid übergeben:

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