把全局变量定义在.h文件中的引起连接错误的原因以及解决办法

把全局变量定义在.h文件中的引起连接错误的原因以及解决办法:

原因:

如果在a.h中定义了int test变量, 在被includemain.cpp中的时候会造成link error;

cl a.cpp, cl main.cpp生成的a.obj, main.obj, 在两个obj文件中都有test定义, 连接时发生错误.

解决办法:

a.h文件中使用extern int test; 相应的a.cpp文件中定义test: int test;这种是标准的用法. 生成的obj文件中仅有a.obj中有test符号信息, main.obj没有.从而不再出现连接错误; 再次,声明多次是没有关系的, 但是定义多次会出现错误!

其他:

一般.h文件仅仅是用作变量,函数等声明, 不作变量,函数定义. .cpp文件则作定义以及实现.

关键是要理解编译器处理头文件的过程. 如果经常用命令行,gcc编译代码的话, 应该比较容易理解.

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页