编译器错误 C2800 - C2899

本文档部分提到的文章解释了编译器生成的一部分错误消息。

重要

Visual Studio 编译器和生成工具可报告多种类型的错误和警告。 发现错误或警告后,生成工具可做出有关代码意向的假设并尝试继续,因此,可能会同时报告更多问题。 如果工具做出错误假设,则后续错误或警告可能不适于你的项目。 纠正项目中的问题时,请始终先纠正报告的第一个错误或警告,然后在通常情况下重新生成。 一个修补程序可能会使许多后续错误消失。

若要在 Visual Studio 中获取有关特定诊断消息的帮助内容,请在“输出”窗口中选择该消息,然后按 F1 键。 Visual Studio 会打开该错误的文档页(如果存在)。 还可以使用页面顶部的搜索工具查找有关特定错误或警告的文章。 或者,按工具浏览错误和警告列表,并在此页面上的内容列表中键入内容。

注意

并非所有 Visual Studio 错误或警告均有记录。 在许多情况下,诊断消息将提供所有可用信息。 如果在使用 F1 时登陆此页,并且认为错误或警告消息需要额外的解释,请告诉我们。 可以使用此页面上的反馈按钮在 GitHub 上提出文档问题。 如果认为错误或警告是错误的,或者发现了工具集的其他问题,请在开发者社区网站上报告产品问题。 还可以在 IDE 中发送反馈并输入 bug。 在 Visual Studio 中,转到菜单栏并选择“帮助”>“发送反馈”>“报告问题”,或者使用“帮助”>“发送反馈”>“发送建议”提交建议

可以在 Microsoft Learn Q&A 论坛上查找有关错误和警告的其他帮助。 或者,在 Visual Studio C++ 开发者社区网站上搜索错误或警告编号。 还可以搜索 Stack Overflow 以查找解决方案。

有关指向其他帮助和社区资源的链接,请参阅 Visual C++ 帮助和社区

错误消息

错误 消息
编译器错误 C2800 “operator operator”不能重载
编译器错误 C2801 “member”必须是非静态成员
编译器错误 C2802 静态成员“operator operator”没有形参
编译器错误 C2803 “operator operator”必须至少有一个类类型的形参
编译器错误 C2804 二进制“operator operator”的参数太多
编译器错误 C2805 二进制“operator operator”的参数过少
编译器错误 C2806 “operator operator”的形参过多
编译器错误 C2807 “operator operator”后缀的第二个形参必须为“int”
编译器错误 C2808 一元“operator operator”的形参过多
编译器错误 C2809 “operator operator”没有形参
编译器错误 C2810 “interface”:接口只能从另一个接口继承
编译器错误 C2811 “type1”:不能从“type2”继承,ref 类只能从 ref 类或接口类继承
编译器错误 C2812 #import 不支持 /clr:pure 和 /clr:safe
编译器错误 C2813 #import 不支持 /MP
编译器错误 C2814 “member”:本机类型不能嵌套在托管/WinRT 类型“class”内
编译器错误 C2815 “operator delete”:第一个形参必须为“void *”,但使用的是“type”
编译器错误 C2816 类函数宏“identifier”的调用缺少终止“)”
编译器错误 C2817 “operator delete”的返回类型必须为“void”
编译器错误 C2818 重载“operator ->”的应用通过“class”类型进行递归
编译器错误 C2819 “class”类型没有重载的成员“operator ->”
编译器错误 C2820 已过时。
编译器错误 C2821 “operator new”的第一个形参必须为“size_t”
编译器错误 C2822 此平台不支持局部回退
编译器错误 C2823 typedef 模板/泛型是非法的
编译器错误 C2824 “operator new”的返回类型必须为“void *”
编译器错误 C2825 “identifier”:当后面跟有“::”时必须为类或命名空间
编译器错误 C2826 已过时。
编译器错误 C2827 不能采用一元格式对“operator operator”进行全局重写
编译器错误 C2828 不能采用二进制形式对“operator operator”进行全局重写
编译器错误 C2829 “operator operator”不能有变量参数列表
编译器错误 C2830 只有“operator new”的放置参数可以有默认值
编译器错误 C2831 “operator operator”不能有默认参数
编译器错误 C2832 “identifier”:引用类型不能进行值初始化
编译器错误 C2833 “operator token”不是可识别的运算符或类型
编译器错误 C2834 “operator operator”必须是全局限定的(在 Visual Studio 2022 中已过时。)
编译器错误 C2835 用户定义的转换“type”不接受形参
编译器错误 C2836 “identifier”:只有联合的一个非静态数据成员可能具有默认的成员初始化表达式
编译器错误 C2837 “function”:不能在同一函数中使用 OpenMP 指令和 #pragma 循环 (hint_parallel)
编译器错误 C2838 “identifier”:成员声明中的非法限定名
编译器错误 C2839 重载的“operator ->”的无效返回类型“type”
编译器错误 C2840 指令字参数不是常量
编译器错误 C2841 寄存器参数不是常量
编译器错误 C2842 “class”:托管/WinRT 类型不能定义自己的“operator new”或“operator delete”
编译器错误 C2843 “member”:不能获取托管/WinRT 类型的非静态数据成员或方法的地址
编译器错误 C2844 “identifier”:不能是接口“interface”的成员
编译器错误 C2845 “type”:此类型上不允许使用指针算法
编译器错误 C2846 “interface”:接口不能有构造函数
编译器错误 C2847 无法将 sizeof 应用到托管/WinRT 类型“class”
编译器错误 C2848 “class”:托管/WinRT 类型不能是联合成员
编译器错误 C2849 “interface”:接口不能有析构函数
编译器错误 C2850 “construct”:仅在文件范围内允许;可能不在嵌套构造中
编译器错误 C2851 “enum”: 公共 WinRT 枚举只能使用“int”或“unsigned int”作为基类型
编译器错误 C2852 “identifier”:只有数据成员才能在类中初始化
编译器错误 C2853 “identifier”:非静态数据成员不能具有包含“auto”的类型
编译器错误 C2854 #pragma hdrstop 中的语法错误
编译器错误 C2855 命令行选项“option”与预编译标头不一致
编译器错误 C2856 #pragma hdrstop 不能在 #if 块内
编译器错误 C2857 在源文件中没有找到用 /Ycfilename 命令行选项指定的“#include”语句
编译器错误 C2858 命令行选项“/Yc (/Fdfilename)”与预编译标头不一致,该标头使用“/Fdfilename”(在 Visual Studio 2022 中已过时。)
编译器错误 C2859 filename 不是创建此预编译标头时使用的 filetype 文件,请重新创建预编译标头
编译器错误 C2860 “void”不能用作函数参数,但“(void)”除外
编译器错误 C2861 “declaration”:无法定义接口成员函数
编译器错误 C2862 “interface”:接口只能有公共成员
编译器错误 C2863 “interface”:接口不能有友元
编译器错误 C2864 “identifier”:具有类中初始值设定项的静态数据成员或模板变量必须具有不可变的常量整型类型
编译器错误 C2865 “operator”:对象指针/句柄的非法比较
编译器错误 C2866 已过时。
编译器错误 C2867 “identifier”:不是命名空间
编译器错误 C2868 “identifier”:using 声明的语法不合法;应为限定名称
编译器错误 C2869 “identifier”:已被定义为命名空间
编译器错误 C2870 “identifier”:命名空间定义必须出现在文件范围内或紧接着出现在另一命名空间定义内
编译器错误 C2871 “identifier”:具有该名称的命名空间不存在
编译器错误 C2872 “identifier”:符号不明确
编译器错误 C2873 “symbol”:符号不能用在 using 声明中
编译器错误 C2874 using 声明导致多次声明“identifier”
编译器错误 C2875 using 声明导致多次声明“class::identifier”(在 Visual Studio 2022 中已过时。)
编译器错误 C2876 “class::member”:并非所有重载都可访问
编译器错误 C2877 无法从“class”访问“member”
编译器错误 C2878 “identifier”:该名称的命名空间或类不存在
编译器错误 C2879 “identifier”:只有现有命名空间才能由命名空间别名定义提供其他名称
编译器错误 C2880 __swi 或 __hvc 需要一个有效常量作为第一个参数(SWI 号)
编译器错误 C2881 “identifier”:已用作“class”的别名
编译器错误 C2882 “identifier”:在表达式中非法使用命名空间标识符
编译器错误 C2883 “function”:函数声明与 using 声明引入的“identifier”冲突
编译器错误 C2884 “identifier”:由 using 声明引入,与本地函数“function”冲突
编译器错误 C2885 “class::identifier”:在非类范围内不是有效的 using 声明
编译器错误 C2886 “class::identifier”:在成员 using 声明中不能使用符号
编译器错误 C2887 __swi 或 __hvc 的参数不能多于五个(SWI 号:r0 - r3)
编译器错误 C2888 “identifier”:不能在命名空间“namespace”中定义符号
编译器错误 C2889 “class”:托管/WinRT 类类型不能是虚拟基类
编译器错误 C2890 “class”:ref 类只能有一个非接口基类
编译器错误 C2891 “parameter”:无法获取模板参数的地址
编译器错误 C2892 局部类不应具有成员模板
编译器错误 C2893 未能使函数模板“template”专用化
编译器错误 C2894 模板不能声明为具有“C”链接
编译器错误 C2895 “declaration”:无法显式实例化已用 dllimport 声明的函数模板
编译器错误 C2896 “function1”:不能使用函数模板/泛型“function2”作为函数参数(在 Visual Studio 2022 中已过时。)
编译器错误 C2897 析构函数/终结器不能是函数模板
编译器错误 C2898 “declaration”:成员函数模板不能是虚拟的
编译器错误 C2899 已过时。

另请参阅

C/C++ 编译器和生成工具错误与警告
编译器错误 C2000 - C3999、C7000 - C7999