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++ 帮助和社区
。
Error messages
Message
编译器错误 C3047
OpenMP“sections”区域中的结构化块的前面必须是“#pragma omp section”(在 Visual Studio 2022 中已过时。)
编译器错误 C3048
“#pragma omp atomic”后面的表达式格式不正确
编译器错误 C3049
“argument”:
OpenMP“default”子句中的参数无效
编译器错误 C3050
“class”:
ref 类不能从“identifier”继承
编译器错误 C3051
编译器错误 C3052
“identifier”:
default(none) 子句下的 data-sharing 子句中未出现变量
编译器错误 C3053
“identifier”:
“threadprivate”只对全局或静态数据项有效
编译器错误 C3054
当前在泛型类或函数中不支持“#pragma omp parallel”(在 Visual Studio 2022 中已过时。)
编译器错误 C3055
“identifier”:
符号在用于“threadprivate”指令之前无法被引用
编译器错误 C3056
“identifier”:
符号所在范围与“threadprivate”指令所在范围不同
编译器错误 C3057
“identifier”:
当前不支持“threadprivate”符号的动态初始化
编译器错误 C3058
“identifier”:
符号在用于“copyin”子句之前,不能声明为“threadprivate”
编译器错误 C3059
“identifier”:
“threadprivate”符号不能用于“clause”子句中
编译器错误 C3060
“identifier”:
友元函数可能没有使用限定名在类内定义(可能只声明了它)
编译器错误 C3061
运算符“operator”:不允许在基本类型为“type”的枚举“type”上使用
编译器错误 C3062
“identifier”:
因为基本类型为“type”,枚举器需要值
编译器错误 C3063
运算符“operator”:所有操作数必须具有相同的枚举类型
编译器错误 C3064
“identifier”:
必须是简单类型或可解析为简单类型
编译器错误 C3065
不允许在非类范围上声明属性
编译器错误 C3066
可通过多种方式使用这些参数调用此类型的对象
编译器错误 C3067
初始化表达式列表不能与内置运算符 [] 一起使用
编译器错误 C3068
“identifier”:
“naked”函数不能包含在出现 C++ 异常的情况下会要求展开的对象
编译器错误 C3069
运算符“operator”:不允许用于枚举类型
编译器错误 C3070
“identifier”:
属性没有“set”方法
编译器错误 C3071
运算符“operator”只能应用于 ref 类或值类型的实例中
编译器错误 C3072
运算符“operator”不能应用于 ref 类的实例中,请使用一元“%”运算符将 ref 类的实例转换为句柄类型
编译器错误 C3073
“identifier”:
ref 类没有用户定义的复制构造函数
编译器错误 C3074
无法使用带圆括号的初始化表达式初始化数组
编译器错误 C3075
“identifier”:
无法将引用类型“type”的实例嵌入到值类型中
编译器错误 C3076
“identifier”:
无法将引用类型“type”的实例嵌入到本机类型中
编译器错误 C3077
“identifier”:
终结器只能是引用类型的成员
编译器错误 C3078
必须在新的表达式中指定数组大小
编译器错误 C3079
初始化表达式列表不能用作此赋值运算符的正确操作数
编译器错误 C3080
“finalizer”:
终结器不能具有存储类说明符
编译器错误 C3081
编译器错误 C3082
编译器错误 C3083
“identifier”:
“::”左侧的符号必须是一种类型
编译器错误 C3084
“identifier”:
析构函数/终结器不能为“keyword”
编译器错误 C3085
“identifier”:
构造函数不能为“keyword”
编译器错误 C3086
找不到“std::initializer_list”:需要 #include <initializer_list>
编译器错误 C3087
“identifier”:
“declaration”的调用已初始化此成员
编译器错误 C3088
“class”:
特性构造函数必须具有已命名的形参
编译器错误 C3089
“identifier”:
参数名与任何数据成员的名称都不匹配
编译器错误 C3090
“class”:
特性类不能是模板
编译器错误 C3091
“class”:
特性类不能包含基类
编译器错误 C3092
“class”
特性类成员不能为位字段、“static”或“const”
编译器错误 C3093
“type”:
该类型不允许用于特性类成员“member”
编译器错误 C3094
“attribute”:
不允许匿名使用
编译器错误 C3095
“attribute”:
特性不能重复
编译器错误 C3096
“attribute”:
特性只能用于特性类的数据成员
编译器错误 C3097
“attribute”:
特性必须使用“assembly:”或“module:”确定范围
编译器错误 C3098
“identifier”:
特性没有用户定义的构造函数
编译器错误 C3099
“keyword”:
将 [System::AttributeUsageAttribute]/[Windows::Foundation::Metadata::AttributeUsageAttribute] 用于托管/WinRT 特性
C/C++ 编译器和生成工具错误与警告
编译器错误 C2000 - C3999、C7000 - C7999