error: conflicting types for 【五大错误原因+解决办法】
·
原因一
没有函数声明,且函数定义在主函数之后
原因二
头文件的被循环引用,在引用时考虑清楚包含顺序
或者使用
#ifndef CAPITAL_FILENAME
#define CAPITAL_FILENAME
// main body
#endif /* CAPITAL_FILENAME */
原因三
头文件函数声明和函数定义参数不同,如
头文件中声明 void test(const char* buf),但在定义时写作 void test(char* buf);
原因四
函数使用的参数类型是自定义类型(如结构体),而自定义类型的定义在函数的声明和函数定义之间,由于在函数声明时,结构体并
没有被定义,不被系统识别为结构体,而后面定义函数时,结构体已经定义,系统将其识别为结构体,导致系统认为声明和定义使用的是不同的参数类型;所以才会出现上述问题;
原因五
在linux中,编译头文件,会出现一个中间的预编译文件(.h.gch),当再次编译整个文件时,如果该文件(.h.gch)存在,则会直接使用该文件(.h.gch),而不会再编译.h文件,此时,如果你改动了.h文件,而继续编译,则会造成声明和定义不一致的现象,虽然在文件里显示声明和定义是一致的,但是实际上系统编译时并不会使用你改动后的文件(.h),而是直接使用你修改前编译生成的.h.gch文件(这个错误一般很难发现,如果发现自己目录下有.h.gch文件,则一定要及时更新)。
参考资料
更多推荐
相关推荐
查看更多
public-apis

这个项目收集了大量公开可用的API接口,适合开发者查找和利用各类公开API来快速构建应用程序或获取所需数据,覆盖范围广泛,从社交、新闻到天气、地图等各种领域。
KrillinAI

基于AI大模型的视频翻译和配音工具,专业级翻译,一键部署全流程
Pake

利用 Rust 轻松构建轻量级多端桌面应用
目录
所有评论(0)