コンパイラ エラー C2065

更新 : 2007 年 11 月

エラー メッセージ

'identifier' : 定義されていない識別子です。

変数の型は、変数が使われる前に宣言されている必要があります。また、関数が使うパラメータは、関数が呼び出される前に宣言またはプロトタイプで宣言されている必要があります。

原因 :

  1. デバッグ バージョンの C ランタイムでコンパイルを行い、C++ 標準ライブラリの反復子変数を for ループで宣言してから、その反復子変数を for ループのスコープの外側で使おうとしています。デバッグ バージョンの C ランタイムで C++ 標準ライブラリをコンパイルすると、/Zc:forScope が暗黙に指定されます。詳細については、「反復子のデバッグのサポート」を参照してください。

  2. ビルド環境で現在サポートされていない SDK ヘッダー ファイルの関数を呼び出している可能性があります。

  3. 必要なインクルード ファイルを省略しています (特に、VC_EXTRALEANWIN32_LEAN_AND_MEAN、または WIN32_EXTRA_LEAN を定義している場合)。これらのシンボルは、コンパイルの速度を上げるために、一部のヘッダー ファイルを windows.h と afxv_w32.h から除外します。windows.h および afxv_w32.h で、除外された項目の最新の説明を確認してください。

  4. 識別子名のスペルが間違っています。

  5. 識別子の大文字と小文字が間違っています。

  6. 文字列定数の後ろの閉じる引用符がありません。

  7. 名前空間スコープが適切ではありません。たとえば、ANSI C++ の標準ライブラリの関数と演算子を解決するには、using ディレクティブで名前空間 std を指定する必要があります。次の例では、using ディレクティブがコメント アウトされ、cout が名前空間 std で定義されているため、コンパイルが失敗します。

使用例

次の例では C2065 エラーが生成されます。

// C2065.cpp
// compile with: /EHsc
// using namespace std;
#include <iostream>
int main() {
   cout << "Hello" << endl;   // C2065

   // try the following line instead
   std::cout << "Hello" << std::endl;
}

ジェネリック関数を呼び出すときに、目的の型の引数を使用しているパラメータから推測できない場合は、コンパイラがエラーを報告します。詳細については、「Generic Functions」を参照してください。

次の例では C2065 エラーが生成されます。

// C2065_b.cpp
// compile with: /clr
generic <typename ItemType>
void G(int i) {}

int main() {
   // global generic function call
   G<T>(10);   // C2065
   G<int>(10);   // OK
}

このエラーは、Visual C++ 属性のパラメータ チェックを行う Visual C++ 2005 で行ったコンパイラ準拠作業の結果として生成されることもあります。詳細については、「Visual C++ 2005 コンパイラの互換性に影響する変更点」を参照してください。

次の例では C2065 エラーが生成されます。

// C2065_c.cpp
// compile with: /c
[module(DLL, name=MyLibrary)];   // C2065
// try the following line instead
// [module(dll, name="MyLibrary")];

[export]
struct MyStruct {
   int i;
};