DEVC++ multiple definition 和 first definition错误怎么解决

在编译的时候就会出错: 原因是洇为在多次包含global.h时重复定义了结构体变量pinfo,即使包含了#ifndef也一样报错

在一个A.cpp文件中定义了一些class和一些普通函数在B.cpp文件中对A.cpp进行了include操作。报错:

这是由于编译是以cpp文件为单位的所以会对A.cpp进行编译,而由于B.cpp中include了A.cpp所以在编译B.cpp的时候又再一次對A.cpp进行了一次编译从而导致上述问题。其实解决方法也很简单将A.cpp的以A.h或者A.hpp的方式存储即可。所以按照通用的形式进行书写是可以避免很多坑的。

如果将main函数中对函数a()的调用的屏蔽去掉则链接时就会出现函数c()重复定义的错误。

由以上结果可以知道链接器在链接时是优先查找目标文件中的函数,目标文件中


不存茬时才会去静态库中查找
既使调用的函数在目标文件和静态库中同时存在,只要没有调用只在静态库中存在的函数
那么也会优先链接目标文件中的函数,而不会报函数重定义的错误
另外,上面的结果与链接时的顺序也没有关系(静态库在目标文件的前面或后面)

另外,如果函数a()在另一个目标文件(比如a.o)中并且这个文件与lib.o不在同一目录,

由a.o和lib.o生成静态库liblib.a,这样即使在main函数中调用函数a(),链接也能正常进荇而不会报

函数c()重定义的错误

我要回帖

 

随机推荐