Skip to content

编译器错误消息


程序编译期间可能出现三种类型的错误:

编译器警告:

警告不会停止编译,只是提醒用户代码中存在不推荐的或容易出错的操作。

有时这些操作是故意编写的以达到某种效果,在这种情况下,可以在命令行设置 -w none 选项来禁用警告。

  • 1(2) 将标量作为指针传递
  • 2(2) 将指针传递给标量
  • 3(2) 传递不同类型的指针
  • 4(2) 可疑的指针赋值
  • 5(1) 隐式转换
  • 6(2) 无法在没有 -export 选项的情况下导出符号
  • 7(2) 标识符名称太长,已截断
  • 8(2) 字面数值太大,已截断
  • 9(2) 字面字符串太大,已截断
  • 10(1) 含有指针、变长字符串或变长数组字段的 UDT
  • 11(1) 隐式变量分配
  • 12(1) 字面字符串中缺少结束引号
  • 13(1) 函数返回值未显式设置
  • 14(2) 分支跳过了局部变量定义
  • 15(1) 没有显式 BYREF 或 BYVAL
  • 16(1) 发现可能的转义序列
  • 17(1) 类型长度太大,考虑用 BYREF 传递
  • 18(2) 参数列表长度太大,考虑用 BYREF 传递 UDT
  • 19(2) ANY 初始化器对有默认构造函数的 UDT 无效
  • 20(3) 目标文件或库混用了多线程(-mt)选项
  • 21(3) 目标文件或库混用了语言(-lang)选项
  • 22(1) 删除 ANY 指针是未定义行为
  • 23(3) 数组对栈来说太大,考虑将其声明为变长或 SHARED
  • 24(3) 变量对栈来说太大,考虑将其声明为 SHARED
  • 25(1) 常量转换时溢出
  • 26(1) NEXT 后面的变量无意义
  • 27(1) 转换为非指针
  • 28(1) 返回方式不匹配
  • 29(1) 传递指针
  • 30(1) 命令行选项覆盖了指令
  • 31(1) 第一次处理后忽略指令
  • 32(1) 在多行 'ELSE' 之后直接发现 'IF' 语句
  • 33(1) 移位值大于或等于数据类型的位数
  • 34(1) 函数参数中的 '=' 被解析为相等运算符,而非对 BYREF 函数结果的赋值
  • 35(1) 混用有符号/无符号操作数
  • 36(1) 参数初始化器不匹配
  • 37(2) 不明确的 LEN 或 SIZEOF
  • 38(1) 可疑的逻辑运算,混用了布尔和非布尔操作数
  • 39(1) 重新定义内置符号
  • 40(0) CONST 限定符被丢弃
  • 41(0) 返回类型不匹配
  • 42(0) 调用约定不匹配
  • 43(0) 参数数量不匹配
  • 44(1) 后缀被忽略
  • 45(1) FOR 计数器变量无法超过限制值
  • 46(1) #cmdline 被忽略
  • 47(1) 使用了保留的全局或后端符号
  • 48(1) 应为数字
  • 49(1) 向上转型丢弃了初始化器
  • 50(2) 传递给 BYREF 参数的可疑地址表达式
  • 51(1) GCC/Clang 未提供正确的 sysroot。您可能需要向 fbc 传递形如 '-sysroot $NDK/platforms/android-$API/arch-$ARCH' 的参数

编译器错误消息:

错误消息会在出现 10 个错误后(参见 -maxerr 命令行选项以更改该默认值)或发生致命错误后停止编译,需要用户更正后才能继续编译。编译器会指出发现错误的行,以便快速定位和更正。少数情况下,错误消息所指向的位置不是错误所在之处,而是编译器放弃等待某个本应存在的内容的位置。

  • 1 参数数量不匹配
  • 2 应为文件末尾
  • 3 应为行末
  • 4 重复定义
  • 5 应为 'AS'
  • 6 应为 '('
  • 7 应为 ')'
  • 8 未定义符号
  • 9 应为表达式
  • 10 应为 '='
  • 11 应为常量
  • 12 应为 'TO'
  • 13 应为 'NEXT'
  • 14 应为标识符
  • 15 应为 '-'
  • 16 应为 ','
  • 17 语法错误
  • 18 元素未定义
  • 19 应为 'END TYPE' 或 'END UNION'
  • 20 类型不匹配
  • 21 内部错误!
  • 22 参数类型不匹配
  • 23 文件未找到
  • 24 无效数据类型
  • 25 无效字符
  • 26 文件访问错误
  • 27 递归层次太深
  • 28 应为指针
  • 29 应为 'LOOP'
  • 30 应为 'WEND'
  • 31 应为 'THEN'
  • 32 应为 'END IF'
  • 33 非法的 'END'
  • 34 应为 'CASE'
  • 35 应为 'END SELECT'
  • 36 维度数量错误
  • 37 数组边界与原始 EXTERN 声明不匹配
  • 38 'SUB' 或 'FUNCTION' 没有 'END SUB' 或 'END FUNCTION'
  • 39 应为 'END SUB' 或 'END FUNCTION'
  • 40 此处的返回类型与 DECLARE 原型不匹配
  • 41 调用约定与 DECLARE 原型不匹配
  • 42 变量未声明
  • 43 需要变量
  • 44 在复合语句外非法
  • 45 应为 'END ASM'
  • 46 函数未声明
  • 47 应为 ';'
  • 48 未定义标签
  • 49 数组维度太多
  • 50 数组太大
  • 51 用户定义类型太大
  • 52 应为标量计数器
  • 53 在 CONSTRUCTOR、DESTRUCTOR、FUNCTION、OPERATOR、PROPERTY 或 SUB 块外非法
  • 54 应为变长数组
  • 55 定长字符串不能从函数返回
  • 56 数组已经确定维度
  • 57 没有 -ex 选项时非法
  • 58 类型不匹配
  • 59 非法规范
  • 60 应为 'END WITH'
  • 61 在函数内部非法
  • 62 SELECT 和第一个 CASE 之间存在语句
  • 63 应为数组
  • 64 应为 '{'
  • 65 应为 '}'
  • 66 应为 ']'
  • 67 表达式太多
  • 68 应为显式结果类型
  • 69 范围太大
  • 70 不允许前向引用
  • 71 不完整类型
  • 72 数组未确定维度
  • 73 数组访问,应为索引
  • 74 应为 'END ENUM'
  • 75 变长数组不能被初始化
  • 76 动态数组给出了 '...' 省略号上界(不支持此用法)
  • 77 数组字段给出了 '...' 省略号上界(不支持此用法)
  • 78 无效位字段
  • 79 参数太多
  • 80 宏文本太长
  • 81 无效命令行选项
  • 82 为 DOS 编译时选择了非 x86 CPU
  • 83 选择的 -gen gas|gas64 汇编后端与 CPU 不兼容
  • 84 -asm att 用于 -gen gas,但 -gen gas 只支持 -asm intel
  • 85 -pic 不支持 -gen gas
  • 86 使用了 -pic,但目标系统不支持(只适用于 Unix)
  • 87 变长字符串不能被初始化
  • 88 不允许递归 TYPE 或 UNION
  • 89 不允许递归 DEFINE
  • 90 标识符不能包含句点
  • 91 可执行文件未找到
  • 92 数组越界
  • 93 缺少命令行选项参数
  • 94 应为 'ANY'
  • 95 应为 'END SCOPE'
  • 96 在复合语句或作用域块内非法
  • 97 UDT 函数结果不能按引用传递
  • 98 对重载函数的调用存在歧义
  • 99 没有匹配的重载函数
  • 100 除以零
  • 101 无法弹出栈,发生下溢
  • 102 包含变长字符串字段的 UDT 不能被初始化
  • 103 跳转到包含局部变量的作用域块
  • 104 跳转到其他函数或模块级别
  • 105 分支跳过了局部数组、变长字符串或对象定义
  • 106 没有 DO 的 LOOP
  • 107 没有 FOR 的 NEXT
  • 108 没有 WHILE 的 WEND
  • 109 没有 WITH 的 END WITH
  • 110 没有 IF 的 END IF
  • 111 没有 SELECT 的 END SELECT
  • 112 没有 SUB 或 FUNCTION 的 END SUB 或 FUNCTION
  • 113 没有 SCOPE 的 END SCOPE
  • 114 没有 NAMESPACE 的 END NAMESPACE
  • 115 没有 EXTERN 的 END EXTERN
  • 116 没有 IF 的 ELSEIF
  • 117 没有 IF 的 ELSE
  • 118 没有 SELECT 的 CASE
  • 119 不能修改常量
  • 120 应为句点('.')
  • 121 应为 'END NAMESPACE'
  • 122 在 NAMESPACE 块内非法
  • 123 在命名空间内定义的符号不能被移除
  • 124 应为 'END EXTERN'
  • 125 应为 'END SUB'
  • 126 应为 'END FUNCTION'
  • 127 应为 'END CONSTRUCTOR'
  • 128 应为 'END DESTRUCTOR'
  • 129 应为 'END OPERATOR'
  • 130 应为 'END PROPERTY'
  • 131 在原始命名空间之外声明
  • 132 没有多行注释结束符,应为 "'/"
  • 133 错误太多,正在退出
  • 134 应为 'ENDMACRO'
  • 135 EXTERN 或 COMMON 变量不能被初始化
  • 136 EXTERN 或 COMMON 动态数组不能有初始边界
  • 137 至少一个参数必须是用户定义类型
  • 138 参数或结果必须是用户定义类型
  • 139 两个参数不能是同一类型
  • 140 参数和结果不能是同一类型
  • 141 此运算符的结果类型无效
  • 142 无效参数类型,必须与父 TYPE/CLASS 相同
  • 143 重载函数中不允许可变参数参数
  • 144 在 OPERATOR 块外非法
  • 145 参数不能是可选的
  • 146 仅在 -lang 中有效
  • 147 默认类型或后缀仅在 -lang 中有效
  • 148 后缀仅在 -lang 中有效
  • 149 隐式变量仅在 -lang 中有效
  • 150 自动变量仅在 -lang 中有效
  • 151 无效数组索引
  • 152 运算符必须是成员函数
  • 153 运算符不能是成员函数
  • 154 方法在匿名 UDT 中声明
  • 155 常量在匿名 UDT 中声明
  • 156 静态变量在匿名 UDT 中声明
  • 157 应为运算符
  • 158 在原始命名空间或类之外声明
  • 159 析构函数不应有任何参数
  • 160 应为类或 UDT 标识符
  • 161 变长字符串不能是 UNION 或嵌套 TYPE 的一部分
  • 162 动态数组不能是 UNION 或嵌套 TYPE 的一部分
  • 163 有构造函数的字段不能是 UNION 或嵌套 TYPE 的一部分
  • 164 有析构函数的字段不能是 UNION 或嵌套 TYPE 的一部分
  • 165 在 CONSTRUCTOR 块外非法
  • 166 在 DESTRUCTOR 块外非法
  • 167 有方法的 UDT 必须有唯一名称
  • 168 父类不是类或 UDT
  • 169 CONSTRUCTOR() 链式调用不在构造函数顶部
  • 170 BASE() 初始化器不在构造函数顶部
  • 171 对有非 CDECL 构造函数的 UDT 执行 REDIM
  • 172 对有非 CDECL 析构函数的 UDT 执行 REDIM
  • 173 对有非无参默认构造函数的 UDT 执行 REDIM
  • 174 对有非 CDECL 构造函数的 UDT 执行 ERASE
  • 175 对有非 CDECL 析构函数的 UDT 执行 ERASE
  • 176 对有非无参默认构造函数的 UDT 执行 ERASE
  • 177 此符号无法被取消定义
  • 178 RETURN 与 'FUNCTION =' 或 EXIT FUNCTION 混用(返回有构造函数的对象时不支持同时使用两种风格)
  • 179 'FUNCTION =' 或 EXIT FUNCTION 与 RETURN 混用(返回有构造函数的对象时不支持同时使用两种风格)
  • 180 缺少 RETURN 来复制构造函数结果
  • 181 无效赋值/转换
  • 182 无效数组下标
  • 183 TYPE 或 CLASS 没有默认构造函数
  • 184 函数结果 TYPE 没有默认构造函数
  • 185 缺少 BASE() 初始化器(没有默认构造函数的基 UDT 需要手动初始化)
  • 186 缺少默认构造函数实现(没有默认构造函数的基 UDT 需要手动初始化)
  • 187 缺少 UDT.constructor(byref as UDT) 实现(没有默认构造函数的基 UDT 需要手动初始化)
  • 188 缺少 UDT.constructor(byref as const UDT) 实现(没有默认构造函数的基 UDT 需要手动初始化)
  • 189 无效优先级属性
  • 190 PROPERTY GET 应该没有参数,或者如果是索引属性则只有一个参数
  • 191 PROPERTY SET 应该有一个参数,或者如果是索引属性则只有两个参数
  • 192 应为 'PROPERTY'
  • 193 在 PROPERTY 块外非法
  • 194 PROPERTY 没有 GET 方法/访问器
  • 195 PROPERTY 没有 SET 方法/访问器
  • 196 PROPERTY 没有索引 GET 方法/访问器
  • 197 PROPERTY 没有索引 SET 方法/访问器
  • 198 缺少重载运算符:
  • 199 NEW[] 运算符不允许对构造函数的显式调用
  • 200 NEW[] 运算符只支持 { ANY } 初始化
  • 201 NEW 运算符不能用于定长字符串
  • 202 非法成员访问
  • 203 应为 ':'
  • 204 默认构造函数没有公共访问权限
  • 205 构造函数没有公共访问权限
  • 206 析构函数没有公共访问权限
  • 207 访问基 UDT 的私有默认构造函数
  • 208 访问基 UDT 的私有析构函数
  • 209 非法的非静态成员访问
  • 210 构造函数声明为 ABSTRACT
  • 211 构造函数声明为 VIRTUAL
  • 212 析构函数声明为 ABSTRACT
  • 213 成员不能是静态的
  • 214 成员不是静态的
  • 215 只有静态成员可以从静态函数和参数初始化器中访问
  • 216 PRIVATE 和 PUBLIC 属性不允许与 REDIM、COMMON 或 EXTERN 一起使用
  • 217 此处使用了 STATIC,但 DECLARE 语句中没有
  • 218 此处使用了 CONST,但 DECLARE 语句中没有
  • 219 此处使用了 VIRTUAL,但 DECLARE 语句中没有
  • 220 此处使用了 ABSTRACT,但 DECLARE 语句中没有
  • 221 方法声明为 VIRTUAL,但 UDT 未扩展 OBJECT
  • 222 方法声明为 ABSTRACT,但 UDT 未扩展 OBJECT
  • 223 未覆盖任何虚方法
  • 224 为 ABSTRACT 方法提供了实现体
  • 225 覆盖的返回类型与被覆盖方法不同
  • 226 覆盖的调用约定与被覆盖方法不同
  • 227 隐式析构函数覆盖的调用约定不同
  • 228 隐式 LET 运算符覆盖的调用约定不同
  • 229 覆盖不是像被覆盖方法那样的 CONST 成员
  • 230 覆盖是 CONST 成员,但被覆盖方法不是
  • 231 覆盖的参数与被覆盖方法不同
  • 232 此运算符不能是 STATIC
  • 233 此运算符隐式为 STATIC,不能是 VIRTUAL 或 ABSTRACT
  • 234 此运算符隐式为 STATIC,不能是 CONST
  • 235 参数必须是整数
  • 236 参数必须是指针
  • 237 应为初始化器
  • 238 在包含成员函数的 TYPE 或 CLASS 中,字段不能与关键字同名
  • 239 在 FOR 复合语句外非法
  • 240 在 DO 复合语句外非法
  • 241 在 WHILE 复合语句外非法
  • 242 在 SELECT 复合语句外非法
  • 243 应为 'FOR'
  • 244 应为 'DO'
  • 245 应为 'WHILE'
  • 246 应为 'SELECT'
  • 247 未找到外层 FOR 复合语句
  • 248 未找到外层 DO 复合语句
  • 249 未找到外层 WHILE 复合语句
  • 250 未找到外层 SELECT 复合语句
  • 251 应为 'CONSTRUCTOR'、'DESTRUCTOR'、'DO'、'FOR'、'FUNCTION'、'OPERATOR'、'PROPERTY'、'SELECT'、'SUB' 或 'WHILE'
  • 252 应为 'DO'、'FOR' 或 'WHILE'
  • 253 在 SUB 块外非法
  • 254 在 FUNCTION 块外非法
  • 255 符号访问有歧义,需要显式作用域解析
  • 256 ENUM、TYPE 或 UNION 不能为空
  • 257 在 EXTERN .. END EXTERN 块内声明的 ENUM 不会打开新作用域
  • 258 在非成员过程上使用 STATIC
  • 259 在非成员过程上使用 CONST
  • 260 在非成员过程上使用 ABSTRACT
  • 261 在非成员过程上使用 VIRTUAL
  • 262 无效初始化器
  • 263 有默认构造/析构函数或方法的对象只允许在模块级别使用
  • 264 嵌套 UDT 中的静态成员变量(只允许在顶层 UDT 中)
  • 265 符号不是 CLASS、ENUM、TYPE 或 UNION 类型
  • 266 元素太多
  • 267 只支持数据成员
  • 268 不允许 UNION
  • 269 不允许数组
  • 270 COMMON 变量不能是有构造/析构函数的 CLASS/TYPE 的对象实例
  • 271 克隆运算符(LET、复制构造函数)不能接受父类型的 byval 参数
  • 272 本地符号不能被引用
  • 273 应为 'PTR' 或 'POINTER'
  • 274 指针间接层次太多
  • 275 动态数组不能是 const
  • 276 const UDT 不能调用非 const 方法
  • 277 字符串和数组的元素必须为空
  • 278 GOSUB 已禁用,使用 'OPTION GOSUB' 启用
  • 279 无效的 -lang
  • 280 不能在带省略号边界的数组中使用 ANY 作为初始化器
  • 281 带省略号边界的数组必须有初始化器
  • 282 不能用 ... 作为下界
  • 283 FOR/NEXT 变量名不匹配
  • 284 所选选项需要 SSE FPU 模式
  • 285 应为关系运算符(=、>、<<><=>=
  • 286 -gen gcc/clang 模式下不支持该语句
  • 287 标签太多
  • 288 不支持的函数
  • 289 应为 sub
  • 290 应为 '#ENDIF'
  • 291 为不支持资源文件的目标系统提供了资源文件
  • 292 -o <file> 选项没有对应的输入文件
  • 293 未扩展 TYPE/UNION(TYPE/UNION 只能扩展其他 TYPE/UNION)
  • 294 在 CLASS、TYPE 或 UNION 方法外非法
  • 295 CLASS、TYPE 或 UNION 未派生
  • 296 CLASS、TYPE 或 UNION 没有构造函数
  • 297 符号类型没有运行时类型信息(RTTI)
  • 298 类型没有层次关系
  • 299 应为 CLASS、TYPE 或 UNION 符号类型
  • 300 从不兼容的指针类型转换派生 UDT 指针
  • 301 从无关的 UDT 指针类型转换派生 UDT 指针
  • 302 将派生 UDT 指针转换为不兼容的指针类型
  • 303 将派生 UDT 指针转换为无关的 UDT 指针类型
  • 304 ALIAS 名称字符串为空
  • 305 LIB 名称字符串为空
  • 306 UDT 有未实现的抽象方法
  • 307 对 ABSTRACT 方法的非虚调用
  • 308 #ASSERT 条件失败
  • 309 应为 '>'
  • 310 无效大小
  • 311 此处的 ALIAS 名称与 DECLARE 原型中的 ALIAS 不匹配
  • 312 可变参数参数只允许在 CDECL 过程中
  • 313 过程的第一个参数不能是可变参数
  • 314 构造函数上使用了 CONST(不需要)
  • 315 析构函数上使用了 CONST(不需要)
  • 316 Byref 函数结果未设置
  • 317 函数外部的函数结果赋值
  • 318 byref 函数结果赋值时类型不匹配
  • 319 给出了 -asm att|intel 选项,但此目标不支持(仅 x86 或 x86_64)
  • 320 引用未初始化
  • 321 不兼容的引用初始化器
  • 322 引用数组——尚不支持
  • 323 无效的 CASE 范围,起始值大于结束值
  • 324 定长字符串与 BYREF 组合(不支持)
  • 325 非法使用保留符号
  • 326 应为 ',' 或 ';'
  • 327 应为文件号表达式
  • 328 格式错误的 SOURCE_DATE_EPOCH 环境变量
  • 329 使用了图形例程,但 gfxlib 尚未移植到此目标
  • 330 -fpu sse 选项只能在 x86 和 x86_64 架构上使用
  • 331 -fpu neon 选项只能在 arm 架构上使用
  • 332 未定义的内置符号

第三方程序错误

这些错误发生在源代码被编译为汇编之后,来自 FB 编译源代码为可执行文件所需的辅助程序:链接器、汇编器以及(用于 Windows 程序的)资源编译器。

如果使用了 IDE 或 make 工具,还可能出现额外的错误。这些错误超出了本帮助文档的范围。

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系