Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
syntaxfel: identifieraren "identifierare"
Anmärkningar
Kompilatorn hittade en identifierare där den inte förväntades. Kontrollera att har identifier deklarerats innan du använder den.
En initialiserare kan omges av parenteser. Undvik det här problemet genom att omsluta deklaratorn i parenteser eller göra den till en typedef.
Det här felet kan också orsakas när kompilatorn identifierar ett uttryck som ett klassmallargument. använd typename för att tala om för kompilatorn att det är en typ, som du ser i följande exempel:
Exempel
I följande exempel genereras 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
}
Så här löser du felet med template<A a> class C1{};använder du template <typename a> class C1 {};
För att lösa problemet med using Type1 = T::Type;använder du using Type1 = typename T::Type;
Lös problemet med alignof(x)genom att ersätta argumentet med typen x. I det här fallet, int eller decltype(x);
C2061 kan inträffa om du skickar ett instansnamn till 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
}