次の方法で共有


コンパイラ エラー C2061

構文エラー: 識別子 'identifier'

コンパイラで、予期されていない識別子が検出されました。 使用する前に、identifier が宣言されていることを確認します。

初期化子は、かっこで囲むことができます。 この問題を回避するには、宣言子をかっこで囲むか、typedef に設定します。

このエラーは、コンパイラがクラス テンプレート引数として式を検出したときにも発生する可能性があります。 typename を使用して、次の例に示すように、型であることをコンパイラに伝えます。

次の例では 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
}

template<A a> class C1{};でエラーを解決するには、template <typename a> class C1 {};
using Type1 = T::Type;の問題を解決するには、using Type1 = typename T::Type;
alignof(x)の問題を解決するには、引数をxの型に置き換えます。 この場合、 int または decltype(x);

C2061 は、インスタンス名を 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
}