编译器错误 C2065
更新:2007 年 11 月
错误消息
“identifier”: 未声明的标识符
在可使用变量的类型前必须在声明中指定它。在可以使用函数前必须在声明或原型中指定该函数使用的参数。
可能的原因:
您正在用 C 运行库的调试版本进行编译,在 for 循环中声明标准 C++ 库迭代器变量,然后尝试在 for 循环范围外使用该迭代器变量。 用 C 运行库的调试版本编译标准 C++ 库代码暗指使用 /Zc:forScope。 有关更多信息,请参见调试迭代器支持。
可能正在调用当前不受生成环境支持的 SDK 头文件中的函数。
省略必要的包含文件,尤其是在定义 VC_EXTRALEAN、WIN32_LEAN_AND_MEAN 或 WIN32_EXTRA_LEAN 时。这些符号从 windows.h 和 afxv_w32.h 中排除了一些头文件以加快编译。(在 windows.h 和 afxv_w32.h 中查找排除的头文件的最新说明。)
标识符名拼写错误。
标识符使用了错误的大小写字母。
字符串常数的后面缺少右引号。
命名空间范围不正确。例如,若要解析 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;
};