Sdílet prostřednictvím


Chyba kompilátoru C2061

chyba syntaxe: identifikátor 'identifikátor'

Kompilátor našel identifikátor, u kterého se neočekávalo. Před použitím se ujistěte, že identifier je deklarován.

Inicializátor může být uzavřen závorky. Chcete-li předejít tomuto problému, uzavřete deklarátor do závorek nebo ho nastavte jako typedef.

K této chybě může dojít také v případě, že kompilátor rozpozná výraz jako argument šablony třídy; pomocí typename řekněte kompilátoru, že se jedná o typ, jak je znázorněno v následujícím příkladu:

Následující ukázka vygeneruje 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
}

Pokud chcete chybu vyřešit pomocí template<A a> class C1{};příkazu , použijte template <typename a> class C1 {};
Pokud chcete tento problém using Type1 = T::Type;vyřešit, použijte using Type1 = typename T::Type;
Pokud chcete tento problém alignof(x)vyřešit, nahraďte argument typem x. V tomto případě int nebo decltype(x);

K C2061 může dojít, pokud předáte název instance do 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
}