1,[Error] a function-definition is not allowed here before ……
原因:在函数内定义且引用了函数,函数内套函数导致混乱
解决方法:在引用函数处加上分号“;”避免混乱
2,[Error] expected unqualified-id before ‘{‘ token
编辑
原因:我们会发现这种错误一般是在主函数或者某个函数的后面添加了分号“;”,导致函数没有函数体,提早结束,所以我们会看到系统显示第三行和第六行是错误的(其实是第二行开始错误的)
解决方法:把主函数后面的分号删除
3, [Error] stray ‘\273’ in program ,[Error] stray ‘\243’ in program和 [Error] expected ‘;’ before ‘return’
编辑
原因:这个程序报错是由全角符的分号”;“所引起的,却导致了三个错误存在,出现”\273″和”\243“的错误是因为出现了阿斯码(ASCII)非法识别的字符【扩展知识点:阿斯克码,计算机的识别符号,一共有256个,恰好占用一个字节(Byte)。前128个为常用的字符如运算符,字母,数字等键盘上可以显示的后128个为特殊字符是键盘上找不到的字符;打出阿斯克码的方法为按住Alt键同时输可识别阿斯克码中所对应的数字0-128;其中,阿斯克码中大小写字母的间隔是32位,因此在一些特殊函数char中用加减32表示大小写字母】,其前面128位是常用字符,被C语言和C++采用,其他字符为非法(stray)字符;除此之外,计算机编程语言为半角符(占用一个字节的符号,代表为英文输入法),解决方法:是把中间的全角符分号换回来
4,[Error] ‘某某某’ does not name a type
编辑
原因:这个报错是拼错了某一关键字(前的文章有介绍)而导致的;或者没有给某一个值定数据类型
解决方法:把关键字拼写正确或者在那个值前面加上数据类型
5, [Error] ‘::main’ must return ‘int’
编辑
原因:这个函数的意思是函数无返回值,但是无论有无return 0都会报错。可能有一些编译器的标准是不一样的,在Dev-C++中,这种写法是错误的,人们对这两个函数有着些争议;后来我意识到,C语言的标准语法是int main()而不是void main()。而C++之父也发表了自己的看法,即C/C++ 中从来没有定义过void main( )【附件:Stroustrup: C++ Style and Technique FAQ】
解决方法:在主函数把void改为int
6,在系统检测不报错的情况下,输入若干个数时,系统总是输出第一个数
编辑
编辑
①
原因:这个错误看似出现在scanf()函数上,实际上是输入法无法互通的问题,当你弹出这个指令窗口的时候,电脑把你的输入法自动切换成了中文输入法,导致你打出的逗号为全角符,影响计算机的判断(因为我们编程的时候一般是打入半角符逗号”,”,和后来的全角符冲突了),计算机只能判定第一个数字,然后输出第一个数字。
解决方法:第一个,在输入数字的时候检查输入法是否没有问题;第二个,在编辑程序的时候把scanf()函数引号里面的逗号删除,同时程序运行的时候两个输入数字的区分应为空行;第三个,把scanf()函数双引号里面的逗号改为输入法的逗号,这样就不用检查输入法了【原则:scanf()函数里面的符号应该和你程序运行时输入的符号一致】
②
原因:语法问题,虽然系统并没有报错,但是由于标点符号等打错或者输入错误导致了运行结果出现问题。
解决方法:检查语法是否有问题
7, [Error] invalid operands of types ‘int*’ and ‘int’ to binary ‘operator&’
编辑
首先,说一下&符号。在scanf()函数中,&为一目运算符,是变量的取地址符,格式为scanf(“符号串”,&参数)。然后说一下逗号“,”的作用,逗号虽然在优先等级里面是最低的,但是逗号却有着传递和分隔的作用 。在scanf()函数中,&1与&2之间要用逗号分隔才能保证左边符号串传递参数的独立性。所以解决方法是在每个&hour之间加上个逗号分隔。
8,使用了循环体却无输出结果(或者结果完全错误)
编辑
编辑
原因:这个错误原因在于我们在while括号后加上一个分号“;”,使得判断条件和循环体分割开来,系统误以为我们想要执行空语句,然后就进入了无限循环,而形式上这种写法是对的,因此我们很难发现错误。
解决方法:去掉while()后面的分号,让判断条件和下面循环体一体【注意:使用do…while语句时,切记while()的后面必须加上分号“;”,以为do…while语句先执行在做判断,后面的判断为语句,需要分号结束】
9,[Error] ‘struct X’ has no member named ‘XXX’
原因:这句话翻译意思是“结构某某没有名为XXX的成员”。一是因为成员里没有规定数据类型,导致XXX无法被识别;二是因为变量的名字被打错导致xxx无法被识别
解决方法:①在定义变量XXX的前面确定数据类型(int ,float,double);②检查输入的变量名是否一致
10,[Error] expected primary-expression before ‘struct’
原因:这句话翻译的意思是“预期的主表达式在struct之前”。也就是说,struct不能被加在scanf里面的取址符后面;我们在输入中不需要结构类型名字,只需要结构名。除此之外,struct不能有一个指向他的指针
解决方法:把里面的“struct”删掉,程序正常运行
11,【Error】expected expression before ‘struct’
原因:这句话翻译意思是““struct”之前应有表达式”。首先出现问题的是结构体,可能是结构体不完整;而且上面例子说到,的p在前面已经被定义,“struct stu p”所以不能这样子被加在&后面
解决方法:先把结构体定义好,然后把图中“struct stu p【i】”改为“【类型标识符】【变量名】”