asen's Blog

Happy coding

常见编译错误信息及说明(转载)

 

说明:以 下是根据用户做题过程中经常出现的编译错误整理的一份说明文档,列出了部分出现频率比较高的编译错误信息,及可能出现这种错误的原因,供用户参考,以便更 有针对性的解决测试中出现的问题。如果出现文档中没有提到的问题,可以做补充说明,我们也会及时更新这份文档,让它更加的全面,具体。

备注:错误信息中的数字代表出错的语句在程序中的哪一行。

Java编译错误信息及说明

1java:33: 不是语句

       解释:程序中出现了没有任何意义的字符(串),可能是无意中打出了没有任何意义的字符;

 

2java:34: 需要 ';'

       解释:某条语句没有以分号结束;

 

3java:36: 缺少返回语句

       解释:带返回值的函数缺少return语句;

 

4java:33: 不兼容的类型

       解释:运算符两边的数据类型不一致或者不能做隐式转换;

 

5java:36: 无法访问的语句

       解释:此语句永远不可能被执行,可能是此语句之前存在类似于whiletrue)的语句,导致此语句永远不可能被执行;

 

6java:34: 非法的表达式开始

       解释:有不符合语法规范的表达式出现;

 

7java:34: 找不到符号

       解释:使用了没有定义或没有引入的变量;

 

8java:33: 非法字符: \65307

       解释:在中文输入状态下输入了一些标点符号;

 

9java:18: 不可转换的类型

       解释:运算符两边的数据类型不一致或者不能做隐式转换;

 

10java:19: "else" 不带有 "if"

       解释:编译器找到else语句但是没有找到与之对应的if语句,可能是由于大括号没有成对出现;

 

11java:12: 可能损失精度

       解释:把高精确度类型的数据赋值给低精确度类型的变量;

 

12java:17: 需要 ')'

      解释: 括号没有成对出现;

 

13java:8: 可能尚未初始化变量 s

       解释:局部变量s没有赋初值

 

14java:7: 不可比较的类型:int Boolean

       解释:运算符两边操作数的数据类型不符合运算符的使用规范;

 

15java:6: 已在 isLeap(int) 中定义 year

       解释:变量year被重复定义;

 

16java:21: 字符字面值的行结尾不合法

       解释:程序语句的结尾不是java规定的结束符号,而是其他的符号;

 

17java:9: 需要 <标识符>

       解释:可能是由于用户指定了数据类型,但未指定该类型的变量名;

 

18java:8: 无法从静态上下文中引用非静态 变量 this

       解释:在静态方法中使用了非静态变量this;

 

19java:12: switch loop 外部中断

       解释:在非循环语句或非switch语句中使用了中断循环功能的语句break;

 

20java:21: 对于结果类型为 void 的方法,无法返回值

       解释:空返回值方法中出现了return语句;

 

21java:12: 需要数组,但找到 int

       解释:在应该出现数组的地方没有找到数组类型的变量,而是找到int类型的变量;

 

22java:13: 无法将 Node 中的 setData(int) 应用于 ()

       解释:一般情况下是方法调用时缺少了参数;

 

23java:5: 缺少数组维数

       解释:数组的定义过程中没有指定数组的维数;

 

24、进行语法解析时已到达文件结尾

       解释:一般情况是缺少{}造成的;

 

25、需要为 classinterface enum

       解释:一般情况下是多了{}造成的;

 

26、无法为最终变量 length 指定值

       解释:Lengthfinal类型的变量,值不能修改。

 

C语言编译错误信息及说明

1 在函数 transform 中:7: 错误:expected ; before { token

    解释:‘{’之前的某个语句缺少分号‘;’;

 

2 在函数 Insert_SqList 中:6: 错误:‘listsize 未声明 (在此函数内第一次使用)

    解释:‘listsize’这个变量未声明;

 

3 在函数 Hanoi 中:9: 错误:提供给函数 Hanoi 的实参太少

    解释:使用‘Hanoi’函数时,输入的实参不足;

 

4 在函数 max 中:3: 错误:‘a 被重新声明为不同意义的符号

    解释:在函数‘max’中,变量名a被重新声明为不同的变量类型;

 

5 在函数 EvaluateExpression 中:7: 错误:程序中有游离的 #

    解释:在函数‘EvaluateExpression’中,有不可识别的ASCII字符。一般这种情况是由于将代码复制进代码区时,有一些编译器不能识别的字符也被复制进去,导致的编译错误;

 

6 在函数 encode 中:6: 错误:被调用的对象 code 不是一个函数

    解释:在函数‘encode’中,调用‘code’时发现,code并未声明为一个函数;

 

7 在函数 prime 中:6: 错误:在 C99 模式之外使用 for 循环初始化声明

    解释:在函数‘prime’中,调用for循环的格式不符合C99规范。一般这类问题的错误格式为for(int i=0;i<...),由于C语言是要求你必须将变量在函数开始处进行声明,不支持在任意地方声明变量,所以正确的格式应该是int i;...; for(i=0; i<...);

 

821: 错误:expected identifier or ( before } token

    解释:在‘}’之前缺少一个标识符或‘(’;

 

9 在函数 CreatLink_L 中:14: 错误:赋值时类型不兼容

    解释:在CreatLink_L函数中,在赋值的过程中等号两侧的数据类型不兼容;

 

10、段错误

    解释:一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个指是由gdtr来保持的,他是一个48位的寄存器,其中32位是保存由它指向的gdt表,后13位保持对英语gdt的下表,最后3位包括了程序是否在内存中以及程序的在cpu中运行的级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程序运行级别还有内存粒度等等的信息。一旦一个程序发生了越界访问,cpu就会产生相应的异常保护,于是segmentation fault(段错误)就出现了。出现段错误比较常见的情况是访问不安全的指针对象,即指针所指的值并非预期的值时,对指针所指向的对象进行操作。引发段错误后,程序执行终止,之后的代码将不再执行;

 

11在函数 ListInsert_Sq 中:12: 错误:‘SqList 没有名为 Length 的成员

    解释:在函数‘ListInsert_Sq’中,访问的结构体‘SqList’并没有‘Length’这个成员;

 

12在函数 ReverseList_Sq 中:11: 错误:数组下标不是一个整数

    解释:在函数‘ReverseList_Sq’中,访问数组成员时使用的下标不是整数。数组中标识每个元素都有一个整形下标,实际操作中是在数组基址的基础上加上这个整形下标得出存储对应数组元素地址,然后访问这个地址存储的数据;

 

13在函数 dec_to_oct 中:10: 错误:实参 1(属于 Push_Sq)类型不兼容

    解释:在函数‘dec_to_oct’中,调用函数Push_Sq时,输入的第一个实参类型与函数指定的第一个实参类型不兼容;

 

14在函数 GetTop 中:7: 错误:在非结构或联合中请求成员 top

    解释:在函数‘GetTop’中,在访问结构体或联合体内的成员变量‘top’时,发现访问的变量类型并非是一个结构体或联合体;

 

15在函数 score 中:5: 错误:case 标号不能还原为一个整常量

    解释:在函数‘score’中,case标号后跟着的表达式的值并非一个常量值。C语言对于switch语句的语法规定,要求switch后面的括号内为一个表达式。其值应与某一个case后面的常量表达式的值相对应,然后就执行此case后面的语句。这就意味着在case语句之后必须是一个整形常量,并且在C编译器中要求这个常量表达式的值还必须是一个整形值;

 

165:23: 警告:多字节字符常量 在函数 transform 中:

    解释:对字符变量赋值应对应一个字符常量,如char c = 'c'。如果将多个字符常量赋给一个字符变量时,如char c = 'abc',就引发多字节字符常量警告;

 

17在函数 transform 中:3: 警告:隐式声明与内建函数 strlen 不兼容

    解释:在程序中使用字符串函数strlen时未include<string.h>。我们的系统希望用户能自行实现一些功能代码,而不是调用库函数。必须要使用库函数的地方,我们会在调用后程序时导入include语句;

 

186: 错误:‘prime 重定义3: 错误:‘prime 的上一个定义在此

    解释:prime函数重定义;

 

19在函数 leap_year 中:3: 错误:赋值运算中的左值无效

    解释:赋值操作符‘=’的左端的值为左值(l_value),对应右侧的值为右值(r_value)。左值的要求是可寻址的(l的意思为can be though of as location,而不是left),一般是变量。右值的要求是可读的(r的意思为can be though of as "read" value,而不是right),可以是变量和常量;

 

20在函数 IntersectList_Sq 中:18: 错误:双目运算符 * 操作数无效

    解释:双目运算符‘*’的操作数不满足运算符的要求,或者说两个操作数不能发生指定的双目运算;

 

21在函数 ListInsert_DuL 中:8: 警告:初始化时将整数赋给指针,未作类型转换

    解释:初始化指针变量时,将整型数值赋给该变量,引发的类型不匹配警告;

 

22在函数 DerivationPolyn 中:7: 错误:无效的初始值设定

    解释:初始化变量时使用不兼容的右值来初始化左值,往往会引发这种错误;

 

23在函数 cmpterm 中:7: 错误:‘-> 的实参类型无效

    解释:‘->’的指向的结构体或联合体成员名不存在,即在访问指针指向的结构体类型中不存在的成员时,会引发这种错误;

 

24在函数 lineEdit 中:15: 警告:传递参数 2 (属于 Pop_Sq)时将整数赋给指针,未作类型转换

    解释:在函数‘lineEdit’中,调用函数Pop_Sq时要求第二个参数为指针变量,而输入的参数为整型;

 

25在函数 ListInsert_DuL 中:8: 警告:从不兼容的指针类型初始化

    解释:在函数‘ListInsert_DuL’中,为指针变量初始化值时,右值与指针类型不兼容;

 

26在函数 ReverseList_Sq 中:8: 错误:与 pa 类型冲突

    解释:可能对变量‘pa’使用了其类型不支持的操作。或者将‘pa’变量赋给不同类型的变量或重定义该变量;

 

278:9: 错误:空的字符常量

    解释:C的字符常量是用单撇号括起来的一个字符。如'a','x','D','?','$'等都是字符常量。但注意''并不表示一个字符常量。如果访问'',就会引发空字符常量错误;

 

28在函数 MergeList_Sq 中:18: 警告:在无返回值的函数中,‘return 带返回值

    解释:void函数为无返回值的函数。这就意味着函数中使用‘return’语句时,之后不能跟有返回值;

 

29在函数 rabbit 中:3: 错误:可变大小的对象不能被初始化

    解释:这种错误一般发生在用变量作为数组大小来初始化数组变量;

 

30在函数 days 中:4: 警告:标量初始值设定项中有多余元素

    解释:在函数‘days’中,在初始化某个数组时,初始化的元素个数多于定义时的元素个数;

 

3113:39: 错误:数字中有太多小数点

    解释:数字常量中有太多小数点,不符合数字常量的定义;

 

323:9: 错误:整数常量的“f”后缀无效 在函数 bonus 中:

    解释:“f”后缀只能添加在实型常量之后,加在整型常量后就会引发该错误;

 

33在函数 count_words 中:7: 错误:‘c 重声明为没有外部链接

    解释:在函数‘count_words’中,声明一个新的变量时,使用了已经存在的某个变量的名称来命名新的变量。C程序在开始执行函数后,首先会根据变量名和变量类型为声明的变量分配存储空间,这就要求所有的变量的名称必须在本函数内是唯一的。任何对同一个变量名的重新声明都将是为错误;

 

34在函数 bonus 中:7: 错误:break 语句不在循环或开关语句内

    解释:break语句的功能是用来跳出switch结构和循环体,即提前结束循环接着执行循环下面的语句。因此C语言要求break语句不能用于循环语句和switch语句之外的任何语句中;

 

35在函数 prime 中:5: 错误:自增运算中的左值无效

    解释:在函数‘prime’中,调用自增操作符时,操作的对象不符合左值要求;

 

36在函数 GetElem_L 中:14: 错误:下标运算的左操作数既非数组也非指针

    解释:下标运算符(或变址运算符)'[]'要求操作符左侧的变量名必须是数组名或指针;

 

37在函数 Insert_SqList 中:7: 错误:expected declaration or statement at end of input

    解释:多数是由于少了匹配的大括号造成的,当然小括号没有闭合也有可能!编译的时候找到文件的末尾也没有找到该出现的东西;

 

38在函数 count_words 中:3: 警告:从不兼容的指针类型初始化

    解释:在函数‘count_words’中,用非指针类型的值来初始化指针类型变量;

 

39在函数 ListInsert_Sq 中:6: 错误:在 data 中缺少数组大小

    解释:在函数‘ListInsert_Sq’中,声明名为data的数组时,没有给出数组的大小,如语句char data[];

 

40在函数 days 中:5: 错误:重复的 case 常量

    解释:在函数 days’中,发现了重复出现的case常量。switch/case语句要求每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。

 

 

ubuntu右键添加打开终端的快捷菜单

第一种方法:
安装一个包,即可在右键里面添加一个“打开终端”的菜单。
sudo apt-get install nautilus-open-terminal


第二种方法:
进入主目录的.gnome2/nautilus-scripts目录。新建一个文件,文件名任意(这个文件名会显示在右键菜单里,最好是通俗易懂的,比如“打开终端”或“open-terminal”),文件内容如下。
引用
#!/bin/bash
#
# This script opens a gnome-terminal in the directory you select.
#
# Distributed under the terms of GNU GPL version 2 or later
#
# Install in ~/.gnome2/nautilus-scripts or ~/Nautilus/scripts
# You need to be running Nautilus 1.0.3+ to use scripts.

# When a directory is selected, go there. Otherwise go to current
# directory. If more than one directory is selected, show error.
if [ -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
set $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
if [ $# -eq 1 ]; then
destination="$1"
# Go to file's directory if it's a file
if [ ! -d "$destination" ]; then
destination="`dirname "$destination"`"
fi
else
zenity --error --title="Error - Open terminal here" \
--text="You can only select one directory."
exit 1
fi
else
destination="`echo "$NAUTILUS_SCRIPT_CURRENT_URI" | sed 's/^file:\/\///'`"
fi

# It's only possible to go to local directories
if [ -n "`echo "$destination" | grep '^[a-zA-Z0-9]\+:'`" ]; then
zenity --error --title="Error - Open terminal here" \
--text="Only local directories can be used."
exit 1
fi

cd "$destination"
exec x-terminal-emulator


添加完后,把此文件加上可执行的权限。
chmod +x 文件

ubuntu 下利用ndiswrapper安装无线网卡驱动

首先 安装 ndiswrapper
ubuntu下也就是 ndisgtk   (用于安装无线网卡驱动)
sudo apt-get install ndisgtk

安装好了之后,找到你的无线网卡在windows下的驱动文件(含有.inf的目录)(可以从网上下载也可以从驱动盘中获得),将该目录中的文件拷到主目录的新建文件夹中,
执行 sudo ndiswrapper -i yourname.inf     //yourname是你驱动inf的文件名称
安装以后会在  /etc/ndiswrapper/  下面建立一个相应的目录youname,

到该目录下(cd /etc/ndiswrapper)执行  sudo ndiswrapper -l   //查看驱动安装ok了没 显示driver installed

写入配置文件:
sudo ndiswrapper -m           (让ndiswrapper在启动时自动加载,
无线网卡会在系统启动初始化hotplug subsysytem时装载(这时卡上的电源灯才会亮) )

modprobe ndiswrapper        (让linux加载ndiswrapper module)

这样就可以配置无线网卡了,在SSID中输入无线路由名,在“无线安全性”中选择“WPA及WPA2个人”,然后输入密码即可。

配置好后重启下无线网络即连接成功。

 

终端中的步骤:

sudo apt-get install ndisgtk

sudo ndiswrapper -i net8192u.inf

cd /etc/ndiswrapper/

sudo ndiswrapper -l

sudo ndiswrapper -m

sudo ndiswrapper -mi   \\保证重启之后不再设置

sudo modprobe ndiswrapper

最后设置无线网络连接。

ubuntu 9.04的源

等待安装结束后,重启,选择进入ubuntu系统,进入后,首先需要配置网络,只有上网后才能升级系统和安装相关工具。配置好系统后,搜索ubuntu9.04的源:

deb http://ubuntu.uestc.edu.cn/ubuntu jaunty main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu jaunty-backports main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu jaunty-proposed main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu jaunty-security main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu jaunty-updates main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu jaunty main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu jaunty-backports main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu jaunty-proposed main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu jaunty-security main restricted universe multiverse
deb-src http://ubuntu.uestc.edu.cn/ubuntu jaunty-updates main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntu-cn jaunty main restricted universe multiverse
deb http://ubuntu.uestc.edu.cn/ubuntustudio jaunty main

在终端中执行命令:更改权限

sudo chmod 777 /etc/apt/sources.list

 

在终端中执行命令:

sudo gedit /etc/apt/sources.list

将搜到的源复制到该文件中保存;

    在终端中执行命令:

sudo apt-get update

获得新源中的软件包;

    在终端中执行命令:

sudo apt-get upgrade