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 int
decltype(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
}