Błąd kompilatora C2061
błąd składni: identyfikator "identifier"
Kompilator znalazł identyfikator, w którym nie był oczekiwany. Przed użyciem upewnij się, że identifier
został zadeklarowany.
Inicjator może być ujęta nawiasami. Aby uniknąć tego problemu, należy ująć deklarator w nawiasy lub ustawić go jako typedef
.
Ten błąd może być również spowodowany tym, że kompilator wykryje wyrażenie jako argument szablonu klasy; użyj typename , aby poinformować kompilator, że jest to typ, jak pokazano w poniższym przykładzie:
Poniższy przykład generuje 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
}
Aby rozwiązać problem z template<A a> class C1{};
poleceniem , użyj polecenia template <typename a> class C1 {};
Aby rozwiązać problem z usługą using Type1 = T::Type;
, użyj polecenia using Type1 = typename T::Type;
Aby rozwiązać problem z elementem alignof(x)
, zastąp argument typem x
. W tym przypadku int
lub decltype(x);
C2061 może wystąpić, jeśli przekażesz nazwę wystąpienia do identyfikatora 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
}