编译器错误 C2065

更新:2007 年 11 月

错误消息

“identifier”: 未声明的标识符

在可使用变量的类型前必须在声明中指定它。在可以使用函数前必须在声明或原型中指定该函数使用的参数。

可能的原因:

  1. 您正在用 C 运行库的调试版本进行编译,在 for 循环中声明标准 C++ 库迭代器变量,然后尝试在 for 循环范围外使用该迭代器变量。 用 C 运行库的调试版本编译标准 C++ 库代码暗指使用 /Zc:forScope。 有关更多信息,请参见调试迭代器支持

  2. 可能正在调用当前不受生成环境支持的 SDK 头文件中的函数。

  3. 省略必要的包含文件,尤其是在定义 VC_EXTRALEANWIN32_LEAN_AND_MEANWIN32_EXTRA_LEAN 时。这些符号从 windows.h 和 afxv_w32.h 中排除了一些头文件以加快编译。(在 windows.h 和 afxv_w32.h 中查找排除的头文件的最新说明。)

  4. 标识符名拼写错误。

  5. 标识符使用了错误的大小写字母。

  6. 字符串常数的后面缺少右引号。

  7. 命名空间范围不正确。例如,若要解析 ANSI C++ 标准库函数和运算符,则必须用 using 指令指定 std 命名空间。下面的示例未能编译,因为 using 指令被注释掉,并且在 std 命名空间中定义了 cout

示例

下面的示例生成 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++ 2005 进行的编译器一致性工作(Visual C++ 属性的参数检查)也可能导致此错误。有关更多信息,请参见 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;
};