本文档部分提到的文章解释了编译器生成的一部分错误消息。
重要
Visual Studio 编译器和生成工具可报告多种类型的错误和警告。 发现错误或警告后,生成工具可做出有关代码意向的假设并尝试继续,因此,可能会同时报告更多问题。 如果工具做出错误假设,则后续错误或警告可能不适于你的项目。 纠正项目中的问题时,请始终先纠正报告的第一个错误或警告,然后在通常情况下重新生成。 一个修复程序可以解决多个后续错误。
若要在 Visual Studio 中获取有关特定诊断消息的帮助内容,请在“输出”窗口中选择该消息,然后按 F1 键。 Visual Studio 会打开该错误的文档页(如果存在)。 还可以使用页面顶部的搜索工具查找有关特定错误或警告的文章。 或者,按工具浏览错误和警告列表,并在此页面上的内容列表中键入内容。
注意
并非所有 Visual Studio 错误或警告均有记录。 在许多情况下,诊断消息将提供所有可用信息。 如果登录此页面并认为错误或警告消息需要其他说明,请使用此页面上的反馈按钮告知我们。 如果认为错误或警告是错误的,或者发现了工具集的其他问题,请在开发者社区网站上报告产品问题。 还可以在 IDE 中发送反馈并输入 bug。 在 Visual Studio 中,转到菜单栏并选择 帮助 > 发送反馈 > 报告问题,或使用 帮助 > 发送反馈 > 建议功能提交建议。 创建了一些编译程序错误主题,这些主题不是由编译程序发出的,但现在会重定向到此页面。
可以在 Microsoft Q&A C++ 论坛中找到有关错误和警告的其他帮助。 或者,在 Visual Studio C++ 开发者社区网站上搜索错误或警告编号。 还可以搜索 Stack Overflow 以查找解决方案。
有关指向其他帮助和社区资源的链接,请参阅 Visual C++ 帮助和社区。
错误消息
| 错误 | 消息 |
|---|---|
| 编译器错误 C2100 | 不能对类型为“type”的操作数进行解引用 |
| 编译器错误 C2101 | 常量上的“&” |
| 编译器错误 C2102 | "&" 要求左值 |
| 编译器错误 C2103 | 寄存器变量上的“&” |
| 编译器错误 C2104 | 已忽略位域上的“&” |
| 编译器错误 C2105 | “operator”需要左值 |
| 编译器错误 C2106 | “operator”:左操作数必须为左值 |
| 编译器错误 C2107 | 非法索引,不允许间接寻址 |
| 编译器错误 C2108 | 下标不是整型 |
| 编译器错误 C2109 | 下标要求数组或指针类型 |
| 编译器错误 C2110 | “+”:不能添加两个指针 |
| 编译器错误 C2111 | “+”:指针加法要求整型操作数 |
| 编译器错误 C2112 | “-”:指针减法要求整型或指针操作数 |
| 编译器错误 C2113 | “-”:指针只能从另一个指针上进行减法运算 |
| 编译器错误 C2114 | “operator”:左侧指针;需要右侧的整数值 |
| 编译器错误 C2115 | “operator”:不兼容的类型 |
| 编译器错误 C2116 | “name”:函数参数列表在声明之间不匹配 |
| 编译器错误 C2117 | “identifier”:数组界限溢出 |
| 编译器错误 C2118 | 负下标 |
| 编译器错误 C2119 | “identifier”:无法从空的初始值设定项推导“type”的类型 |
| 编译器错误 C2120 | “void”不能与任何其他类型说明符组合 |
| 编译器错误 C2121 | “#”:无效字符:可能是宏扩展的结果 |
| 编译器错误 C2122 | “identifier”:名称列表中的原型参数非法 |
| 编译器错误 C2123 | “identifier”:别名模板无法显式或部分专门化 |
| 编译器错误 C2124 | 被零除或对零求模 |
| 编译器错误 C2125 | “constexpr”与“token”不兼容 |
| 编译器错误 C2126 | 不能使用“constexpr”说明符声明“identifier” |
| 编译器错误 C2127 | “identifier”:非法初始化了含非常量表达式的“constexpr”实体 |
| 编译器错误 C2128 | “function”:alloc_text/same_seg 只可用于带 C 链接的函数 |
| 编译器错误 C2129 | 静态函数“identifier”已声明但未定义 |
| 编译器错误 C2130 | #line 应为包含文件名的字符串,却找到“token” |
| 编译器错误 C2131 | 表达式的计算结果不是常数 |
| 编译器错误 C2132 | 语法错误:意外的标识符 |
| 编译器错误 C2133 | “identifier”: 未知大小 |
| 编译器错误 C2134 | “function”:调用不会生成常数表达式 |
| 编译器错误 C2135 | “identifier”:不能将“operator”应用于位字段 |
| 编译器错误 C2136 | 不允许创作 API 协定 |
| 编译器错误 C2137 | 空字符常量 |
| 编译器错误 C2138 | 定义没有任何成员的枚举是非法的 |
| 编译器错误 C2139 | “class”:未定义的类不允许作为编译器内部类型特征“trait”的参数 |
| 编译器错误 C2140 | “type”:依赖于泛型类型参数的类型不允许作为编译器内部类型特征“trait”的参数 |
| 编译器错误 C2141 | 数组大小溢出 |
| 编译器错误 C2142 | 函数声明有差异,只在一个声明中指定了变量参数 |
| 编译器错误 C2143 | 语法错误:“token2”的前面缺少“token1” |
| 编译器错误 C2144 | 语法错误:“token2”的前面应有“type” |
| 编译器错误 C2145 | 语法错误:标识符的前面缺少“token” |
| 编译器错误 C2146 | 语法错误:标识符“identifier”的前面缺少“token” |
| 编译器错误 C2147 | 语法错误:“token”是一个新关键字 |
| 编译器错误 C2148 | 数组的总大小不得超过 0xvalue 字节 |
| 编译器错误 C2149 | “identifier”:已命名位域不能具有零宽度 |
| 编译器错误 C2150 | “identifier”:位域必须有“int”、“signed int”或“unsigned int”类型 |
| 编译器错误 C2151 | 语言特性多于一个 |
| 编译器错误 C2152 | “identifier”:指向有不同特性的函数的指针 |
| 编译器错误 C2153 | 整数文本必须至少具有一位数 |
| 编译器错误 C2154 | “type”:仅允许枚举类型作为编译器内部类型特征“__underlying_type”的参数 |
| 编译器错误 C2155 | “?”:左边的操作数无效,应使用算术类型或指针类型 |
| 编译器错误 C2156 | 杂注必须在函数的外部 |
| 编译器错误 C2157 | “identifier”:必须先声明,然后才可用于 pragma 列表 |
| 编译器错误 C2158 | “type”:目前只有本机非模板类型才支持 #pragma make_public 指令 |
| 编译器错误 C2159 | 指定了一个以上的存储类 |
| 编译器错误 C2160 | “##”不能在宏定义的开始处出现 |
| 编译器错误 C2161 | “##”不能在宏定义的结尾处出现 |
| 编译器错误 C2162 | 应输入宏形参 |
| 编译器错误 C2163 | “function”:不可用作内部函数 |
| 编译器错误 C2164 | “function”:未声明内部函数 |
| 编译器错误 C2165 | “modifier”:不能修改指向数据的指针 |
| 编译器错误 C2166 | 左值指定 const 对象 |
| 编译器错误 C2167 | “function”:内部函数的实参过多 |
| 编译器错误 C2168 | “function”:内部函数的实参太少 |
| 编译器错误 C2169 | “function”:内部函数,不能定义 |
| 编译器错误 C2170 | “function”:没有声明为函数,不能是内部函数 |
| 编译器错误 C2171 | 运算符“operator”不能应用于类型为“type”的作数 |
| 编译器错误 C2172 | “function”:实参不是指针:参数数目 |
| 编译器错误 C2173 | “function”:实参不是指针:参数 number1,参数列表 number2 |
| 编译器错误 C2174 | “function”:实参具有“void”类型:参数 number,参数列表 number |
| 编译器错误 C2175 | “locale”:无效的区域设置 |
| 编译器错误 C2176 | 不能在与构造函数关联的函数 try 块的处理程序中使用 return 语句 |
| 编译器错误 C2177 | 常量太大 |
| 编译器错误 C2178 | 不能使用“specifier”说明符声明“identifier” |
| 编译器错误 C2179 | “type”:特性参数不能使用类型参数 |
| 编译器错误 C2180 | 控制表达式具有类型“type” |
| 编译器错误 C2181 | 没有匹配 if 的非法 else |
| 编译器错误 C2182 | “identifier”:此使用“void”无效 |
| 编译器错误 C2183 | 语法错误:翻译单元为空 |
| 编译器错误 C2184 | “type”:__except 表达式的类型非法 |
| 编译器错误 C2185 | “identifier”:基于非法的分配 |
| 编译器错误 C2186 | “operator”:“void”类型的操作数非法 |
| 编译器错误 C2187 | 语法错误:“token”出现在此处是意外 |
| 编译器错误 C2188 | “number”:对宽字符来说太大 |
| 编译器错误 C2189 | “alignas”属性不可适用于位域、函数参数、异常声明或用“register”存储类声明的变量 |
| 编译器错误 C2190 | 第一个参数列表比第二个长 |
| 编译器错误 C2191 | 第二个参数列表比第一个长 |
| 编译器错误 C2192 | 参数“number”声明不同 |
| 编译器错误 C2193 | “identifier”:已在段中 |
| 编译器错误 C2194 | “identifier”:是一个文本段 |
| 编译器错误 C2195 | “identifier”:是一个数据段 |
| 编译器错误 C2196 | case 值“value”已使用 |
| 编译器错误 C2197 | “function”:用于调用的参数过多 |
| 编译器错误 C2198 | “function”:用于调用的参数太少 |
| 编译器错误 C2199 | 语法错误:在全局范围内找到“identifier”(是否预期声明?) |