我只是构建一个简单的 C++ 项目。代码如下所示:
-------- head.h --------
#ifndef _HEAD_H_
#define _HEAD_H_
int my_var = 100;
#endif
-------- src1.cpp --------
#include "head.h"
-------- src2.cpp --------
#include "head.h"
int main() { return 0; }
我用这些命令构建二进制文件:
g++ -c src1.cpp -o scr1.o
g++ -c src2.cpp -o src2.o
g++ -o a.out src2.o src1.o
但它在链接步骤中失败,并告诉我我有“‘my_var’的多个定义。我不是在头文件中使用了安全保护宏吗?我不明白。有人知道为什么吗?
thanks.
附:
如果我将 my_var 定义为静态变量,那么代码就可以通过链接了。我也不明白。
按以下方式更改标题
#ifndef _HEAD_H_
#define _HEAD_H_
extern int my_var;
#endif
例如,在模块中添加带有 main 的行
#include "head.h"
int my_var = 100;
int main() { return 0; }
问题在于,由于标头包含在两个模块中,因此每个模块都包含一个具有外部链接的变量,其名称与其他模块中的变量相同。并且链接器不知道要使用哪个变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)