编译器错误 C3000 - C3099
本文档部分提到的文章解释了编译器生成的一部分错误消息。
重要
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++ 帮助和社区。
错误消息
错误 | Message |
---|---|
编译器错误 C3000 | “symbol”:使用类模板需要模板参数列表。 在非静态数据成员中不允许使用参数推导。 |
编译器错误 C3001 | “message”:应为 OpenMP 指令名称 |
编译器错误 C3002 | “name1 name2”:多个 OpenMP 指令名称 |
编译器错误 C3003 | “directive”:在指令子句之后不允许使用 OpenMP 指令名称 |
编译器错误 C3004 | “clause”:OpenMP“directive”指令上的子句无效 |
编译器错误 C3005 | “message”:OpenMP“directive”指令上出现意外的标记 |
编译器错误 C3006 | “clause”:OpenMP“directive”指令上的子句缺少应有的参数 |
编译器错误 C3007 | “clause”:OpenMP“directive”指令上的子句没有采用参数 |
编译器错误 C3008 | “argument”:OpenMP“directive”指令上的参数缺少右括号“)” |
编译器错误 C3009 | “label”:不允许跳转到 OpenMP 结构化块中 |
编译器错误 C3010 | “label”:不允许跳出 OpenMP 结构化块 |
编译器错误 C3011 | 并行区域内不允许直接使用内联程序集 |
编译器错误 C3012 | “function”:并行区域内不允许直接使用内部函数 |
编译器错误 C3013 | “clause”:子句在 OpenMP“directive”指令上只能出现一次 |
编译器错误 C3014 | OpenMP“directive”指令应后接 for 循环 |
编译器错误 C3015 | OpenMP“for”语句中的初始化格式不正确 |
编译器错误 C3016 | “identifier”:OpenMP“for”语句中的索引变量必须是有符号的整型类型 |
编译器错误 C3017 | OpenMP“for”语句中的终止测试格式不正确 |
编译器错误 C3018 | “identifier”:OpenMP“for”测试或递增必须使用索引变量“variable” |
编译器错误 C3019 | OpenMP“for”语句中的增量格式不正确 |
编译器错误 C3020 | “variable”:OpenMP“for”循环的索引变量不能在循环体中修改 |
编译器错误 C3021 | “argument”:OpenMP“directive”指令上的参数为空 |
编译器错误 C3022 | “directive”:在 OpenMP“directive”指令上的“directive”的计划类型无效 |
编译器错误 C3023 | “argument”:在 OpenMP“directive”子句的参数中遇到意外的标记 |
编译器错误 C3024 | “schedule(runtime)”:不允许使用 chunk_size 表达式 |
编译器错误 C3025 | “clause”:应为整型表达式 |
编译器错误 C3026 | “clause”:常量表达式必须为正 |
编译器错误 C3027 | “clause”:需要算术表达式或指针表达式 |
编译器错误 C3028 | “member”:只有变量或静态数据成员才能用于 data-sharing 子句 |
编译器错误 C3029 | “symbol”:只能在 OpenMP 指令中的 data-sharing 子句中出现一次 |
编译器错误 C3030 | “identifier”:“directive”子句/指令中的变量不能有引用类型 |
编译器错误 C3031 | “identifier”:“reduction”子句中的变量必须有标量算术类型 |
编译器错误 C3032 | “identifier”:“clause”子句中的变量不能有不完整的“type”类型 |
编译器错误 C3033 | “identifier”:“clause”子句中的变量不能有常量限定类型 |
编译器错误 C3034 | OpenMP“directive”指令不能直接嵌套在“directive”指令中 |
编译器错误 C3035 | OpenMP“ordered”指令必须使用“ordered”子句直接绑定到“for”或“parallel for”指令 |
编译器错误 C3036 | “clause”:OpenMP“reduction”子句中的运算符标记无效 |
编译器错误 C3037 | “identifier”:“clause”子句中的变量必须在封闭上下文中共享 |
编译器错误 C3038 | “identifier”:“private”子句中的变量不能是封闭上下文中的 reduction 变量 |
编译器错误 C3039 | “identifier”:OpenMP“for”语句中的索引变量不能是 reduction 变量 |
编译器错误 C3040 | “identifier”:“reduction”子句中的变量类型与 reduction 运算符“operator”不兼容 |
编译器错误 C3041 | “identifier”:”copyprivate”子句中的变量在封闭上下文中必须是私有的 |
编译器错误 C3042 | “copyprivate”和“nowait”子句不能同时出现在 OpenMP“directive”指令中 |
编译器错误 C3043 | OpenMP“critical”指令不能嵌套在同名的“critical”指令中 |
编译器错误 C3044 | “section”:只允许直接嵌套在 OpenMP“sections”指令中 |
编译器错误 C3045 | OpenMP “sections”指令后应为一个复合语句。 缺少“{” |
编译器错误 C3046 | OpenMP“#pragma omp sections”区域中缺少结构化块 |
编译器错误 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 特性 |