在日常使用Dev c++编译器过程中,会遇到各种样的编译错误,在这篇文章中进行总结,以便以后再次遇到,持续更新!!!
文章目录
- 一、expected declaration or statement at end of input
- 二、expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘<’ toke
- 三、incompatible type for argument 1 of ‘StatusList_Sq‘
- 四、 invalid initializer
- 五、expected identifier or ‘(’ before***
- 六、error:too few arguments to function
- 七、 [Error] ld returned 1 exit status
一、expected declaration or statement at end of input
1. 某一个函数或者变量没有在使用之前声明。
2. 某个地方少了个括号。(并不一定是编译器指出错误的地方,这种情况,编译器一般会在最后一行代码报错,但错误很可能不在最后一行,要靠自己去找出来)
二、expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘<’ toke
1.原因:用gcc编译cpp文件。解决:用g++编译cpp文件
注:用Makefile很容易误用gcc的,类似问题遇到过无数次……还有连接的时候也是,有些版本的make喜欢用gcc连接,直接挂掉。我通常都在头部加一句CC=g++ CFLAGS=-x c,感觉挺好用。
2.原因:包含头文件时缺少“#”或者函数“{”与“}”没有成对的出现
3.原因:新加的内容与头文件冲突
注:error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘XXX’,如果XXX是类名,那么几乎可以肯定地说是你的C文件里包含了C++头文件。楼主遇到的正是这个问题。建议不要使用10楼的方法。最好的方法是,不要去包含c++头文件!如果你的C文件要用到类,干脆直接将C文件改成CPP文件得了。缺少标点符号和全半角的提示是不一样的。
4.tyepdef int (*psum)(int,int);
typedef拼写错误,如上,报的错误: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘int’
三、incompatible type for argument 1 of ‘StatusList_Sq‘
一般是因为被调用函数的形参对象应该是数组名,而不应该是数组
argument 和parameter 一样,都是函数的参数。
parameter是指函数定义中参数,而argument指的是函数调用时的实际参数。
四、 invalid initializer
英文翻译:无效的初始值设定
变量和赋值的数据,两者之间的数据类型不匹配
五、expected identifier or ‘(’ before***
直译:错误:在’=‘这个记号之前期待着有标识符或者’('。
解决方案:
1.主函数()的后面不能加分号,调用函数的()后面也不能加分号…
比如
#incluede<stdio.h>
main()
{
int x,y,z;
scanf("%d,%d",&x,&y);
z=area(x,y);
printf(“area is %d\n”,z);
}
int area(int a,int b);
{
int c;
c=a*b;
return ©;
}
上面的例子就会出现那样的结果,把int area(int a,int b)后面的分号去了 就对了!因为他是调用函数。
2.代码里有未被识别的字符,将那段字符注释掉就可以了
3.我上个语句以 ,结尾的,改成 ;即可
六、error:too few arguments to function
意思:函数参数调用错误;
分析:调用 时参数多了或者少了;
改了就ok
七、 [Error] ld returned 1 exit status
这样的报错,但却没有显示报错地址(即在哪一行报错);
分析:
1.程序没有主函数
2.printf/scanf书写错误
3在主函数中出现自定义函数名书写错误(即出现在主函数前未出现的自定义函数)
4当自定义函数只进行了声明,主函数便进行调用
5上一个运行结果未关闭