本文档部分提到的文章解释了编译器生成的一部分错误消息。
重要
Visual Studio 编译器和生成工具可报告多种类型的错误和警告。 发现错误或警告后,生成工具可做出有关代码意向的假设并尝试继续,因此,可能会同时报告更多问题。 如果工具做出错误假设,则后续错误或警告可能不适于你的项目。 纠正项目中的问题时,请始终先纠正报告的第一个错误或警告,然后在通常情况下重新生成。 一个修复程序可以解决多个后续错误。
若要在 Visual Studio 中获取有关特定诊断消息的帮助内容,请在“输出”窗口中选择该消息,然后按 F1 键。 Visual Studio 会打开该错误的文档页(如果存在)。 还可以使用页面顶部的搜索工具查找有关特定错误或警告的文章。 或者,在本页的目录中按工具和类型浏览错误和警告列表。
注意
并非所有 Visual Studio 错误或警告均有记录。 在许多情况下,诊断消息将提供所有可用信息。 如果登录此页面并认为错误或警告消息需要其他说明,请使用此页面上的反馈按钮告知我们。 如果认为错误或警告是错误的,或者发现了工具集的其他问题,请在开发者社区网站上报告产品问题。 还可以在 IDE 中发送反馈并输入 bug。 在 Visual Studio 中,转到菜单栏并选择 帮助 > 发送反馈 > 报告问题,或使用 帮助 > 发送反馈 > 建议功能提交建议。 创建了一些编译程序错误主题,这些主题不是由编译程序发出的,但现在会重定向到此页面。
可以在 Microsoft Q&A C++ 论坛中找到有关错误和警告的其他帮助。 或者,在 Visual Studio C++ 开发者社区网站上搜索错误或警告编号。 还可以搜索 Stack Overflow 以查找解决方案。
有关指向其他帮助和社区资源的链接,请参阅 Visual C++ 帮助和社区。
错误消息
| 错误 | 消息 |
|---|---|
| 编译器错误 C2900 | declarator:WinRT 类中的成员函数模板必须为“private”、“internal”或“protected private” |
| 编译器错误 C2901 | identifier:泛型接口或委托不能为公共 |
| 编译器错误 C2902 | token:‘template/generic’ 后出现意外的标记,应输入标识符(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2903 | 'identifier':该符号既不是类模板/泛型,也不是函数模板/泛型 |
| 编译器错误 C2904 | identifier:该名称已在当前作用域中用于模板 |
| 编译器错误 C2905 | 已过时。 |
| 编译器错误 C2906 | template:显式特化需要“template <>” |
| 编译器错误 C2907 | 寄存器参数“number”未指定有效的寄存器编号 |
| 编译器错误 C2908 | 显式特化;`template` 已被实例化 |
| 编译器错误 C2909 | “identifier”:函数模板的显式实例化需要返回类型 |
| 编译器错误 C2910 | 'function':不能被显式特化 |
| 编译器错误 C2911 | 'member':无法在当前作用域中声明或定义 |
| 编译器错误 C2912 | 显式特化“声明”不是函数模板的特化 |
| 编译器错误 C2913 | 显式特化;“declaration”不是类模板的特化 |
| 编译器错误 C2914 | identifier:由于函数参数存在歧义,无法推导模板/泛型参数 |
| 编译器错误 C2915 | 'identifier':'type' 不能直接用于 WinRT 类型的已发布接口上。 改用“Platform::Object^”传递此类型 |
| 编译器错误 C2916 | identifier: [FlagsAttribute] 必须(且只能)用于基础类型为“unsigned int”的公共枚举 |
| 编译器错误 C2917 | “identifier”:无效的模板参数(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2918 | identifier:不能在 WinRT 类型的已发布表面上使用索引属性 |
| 编译器错误 C2919 | type:不能在 WinRT 类型已发布的 API 表面上使用运算符 |
| 编译器错误 C2920 | 重定义:'type':类模板/泛型已声明为 'declaration' |
| 编译器错误 C2921 | 重定义:“type”:类 template/generic 将重新声明为“declaration” |
| 编译器错误 C2922 | “interface”:WinRT 接口不能包含静态成员 |
| 编译器错误 C2923 | 'type':'identifier' 不是参数 'parameter' 的有效模板/泛型类型实参 |
| 编译器错误 C2924 | __declspec(interrupt) 例程参数不在 R2 中 |
| 编译器错误 C2925 | __declspec(interrupt) 例程不能使用浮点型数值 |
| 编译器错误 C2926 | identifier:联合内匿名结构的成员不允许使用默认成员初始化器 |
| 编译器错误 C2927 | 'identifier':函数模板的调用必须至少带一个参数 |
| 编译器错误 C2928 | 显式实例化;'identifier' 不是模板类 'class' 的函数或静态数据成员 |
| 编译器错误 C2929 | 声明符:显式实例化;不能显式强制或抑制模板类成员的实例化 |
| 编译器错误 C2930 | 'class':模板 ID/泛型 ID 被重新定义为枚举 'enum identifier' 的枚举器 |
| 编译器错误 C2931 | class1:模板 ID/泛型 ID 被重新定义为 class2 的成员函数(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2932 | type:模板 ID/泛型 ID 被重新定义为 identifier 的数据成员(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2933 | 'type':template-id/generic-id 被重新定义为 'identifier' 的 typedef 成员(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2934 | type:template-id/generic-id 被重新定义为 identifier 的嵌套 item(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2935 | type:template-id/generic-id 被重新定义为全局函数(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2936 | type:模板 ID/泛型 ID 被重新定义为全局数据变量(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2937 | type:模板 ID/泛型 ID 被重新定义为全局 typedef(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2938 | identifier : 无法特化别名模板 |
| 编译器错误 C2939 | “type”:template-id/generic-id 重新定义为局部数据变量(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2940 | type:template-id/generic-id 被重新定义为本地 typedef(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2941 | 'type':模板 ID/泛型 ID 被重新定义为局部 'item'(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2942 | type:template-id/generic-id 被重新定义为函数的形式参数(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2943 | type:模板 ID/泛型 ID 被重新定义为模板的类型实参(在 Visual Studio 2022 中已弃用。) |
| 编译器错误 C2944 | type:模板 ID/泛型 ID 被重新定义为模板的值实参(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2945 | 显式实例化不涉及模板类特化 |
| 编译器错误 C2946 | 显式实例化;'type' 不是模板类特化 |
| 编译器错误 C2947 | 应使用“>”结束模板参数,却找到了“token” |
| 编译器错误 C2948 | 显式实例化;特化中不允许使用存储类说明符“specifier” |
| 编译器错误 C2949 | /kernel 不支持 thread_local |
| 编译器错误 C2950 | 已过时。 |
| 编译器错误 C2951 | template/generic 声明只能在全局、命名空间或类范围内使用 |
| 编译器错误 C2952 | declaration:模板/泛型声明缺少模板/泛型参数列表 |
| 编译器错误 C2953 | type:类模板已定义 |
| 编译器错误 C2954 | 指令字参数不在范围中 |
| 编译器错误 C2955 | type:使用类模板/泛型需要模板/泛型参数列表 |
| 编译器错误 C2956 | 常规释放函数 'function' 将被选作定位释放函数。 |
| 编译器错误 C2957 | token:无效的左分隔符:应为“<” |
| 编译器错误 C2958 | 在“file(line_number)”处找到的左分隔符未能正确匹配 |
| 编译器错误 C2959 | 泛型类或函数不能是模板的成员 |
| 编译器错误 C2960 | 已过时。 |
| 编译器错误 C2961 | “函数”:显式实例化不一致,之前的显式实例化未指定“参数” |
| 编译器错误 C2962 | 语法错误:“token”:模板类成员函数定义应以“}”结尾 |
| 编译器错误 C2963 | 已过时。 |
| 编译器错误 C2964 | 已过时。 |
| 编译器错误 C2965 | /kernel 不支持 __declspec(specifier) |
| 编译器错误 C2966 | “identifier1”:必须具有与其基类“identifier2”相同的 __declspec(code_seg(...))(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2967 | identifier:重写虚函数必须与被重写的虚函数具有相同的 __declspec(code_seg(...))(在 Visual Studio 2022 中已过时。) |
| 编译器错误 C2968 | 'identifier':递归别名声明 |
| 编译器错误 C2969 | 语法错误:“token”:成员函数定义应以“}”结尾 |
| 编译器错误 C2970 | “type”:模板参数“parameter”:“argument”:涉及带有内部链接的对象的表达式不能用作非类型参数 |
| 编译器错误 C2971 | “type”:模板参数“parameter”:“argument”:包含非静态存储持续时间的变量不能用作非类型参数 |
| 编译器错误 C2972 | 'type':模板参数“parameter”:非类型实参的类型无效 |
| 编译器错误 C2973 | “template”:无效的模板参数“number” |
| 编译器错误 C2974 | 'type':'parameter' 的模板/泛型参数无效,应为类型 |
| 编译器错误 C2975 | 'type':'parameter' 的模板参数无效,应为编译时常量表达式 |
| 编译器错误 C2976 | type:模板/泛型参数过少 |
| 编译器错误 C2977 | 'type':模板/泛型参数过多 |
| 编译器错误 C2978 | 语法错误:应为“keyword1”或“keyword2”;却发现类型“type”;泛型中不支持非类型参数 |
| 编译器错误 C2979 | 泛型中不支持显式特化 |
| 编译器错误 C2980 | C++ 异常处理不受 /kernel 支持 |
| 编译器错误 C2981 | /kernel 不支持 'keyword' 的动态形式 |
| 编译器错误 C2982 | 'declaration':使用了不同的 __declspec(code_seg(...)):之前为 'identifier1',现在为 'identifier2' |
| 编译器错误 C2983 | “name”:定义必须与之前的声明相同__declspec(code_seg(...)) |
| 编译器错误 C2984 | 已过时。 |
| 编译器错误 C2985 | argument:__declspec(code_seg(...)) 的参数必须是文本节 |
| 编译器错误 C2986 |
__declspec(code_seg(...))“”只能应用于类或函数 |
| 编译器错误 C2987 | 声明不能同时具有 __declspec(code_seg('identifier')) 和 __declspec(code_seg('value')) |
| 编译器错误 C2988 | 不可识别的模板声明/定义 |
| 编译器错误 C2989 | class:类模板/泛型已声明为非类模板/泛型 |
| 编译器错误 C2990 | class:非类模板/泛型已声明为类模板/泛型 |
| 编译器错误 C2991 | 模板/泛型参数“parameter”被重新定义 |
| 编译器错误 C2992 | class:模板/泛型参数列表无效或缺失 |
| 编译器错误 C2993 | 'type':对非类型模板参数“identifier”来说是非法类型 |
| 编译器错误 C2994 | 模板参数列表中未命名的类 |
| 编译器错误 C2995 | “声明”:函数模板已定义 |
| 编译器错误 C2996 | “function”:递归函数模板定义 |
| 编译器错误 C2997 | function:无法从默认成员初始值设定项中推导出数组边界 |
| 编译器错误 C2998 | “identifier”:不能是模板定义 |
| 编译器错误 C2999 | 最大模板实例化深度超出 depth(参见“/templateDepth:N”) |