一个‘ multiple definition of’错误

在编译程序时,出现:

make
g++ -c CSeq.cpp
g++  -o testmain testmain.o dbSeqAlign.o CSeq.o
dbSeqAlign.o:(.data+0x0): multiple definition of `PAM_250'
testmain.o:(.data+0x0): first defined here
dbSeqAlign.o:(.data+0x790): multiple definition of `gap_open'
testmain.o:(.data+0x790): first defined here
dbSeqAlign.o:(.data+0x794): multiple definition of `gap_ext'
testmain.o:(.data+0x794): first defined here
dbSeqAlign.o:(.bss+0x0): multiple definition of `alphabet'
testmain.o:(.bss+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [testmain] Error 1

使劲的看了代码,明明没有重复定义啊,干脆把预定义不上

#ifndef

#define

#endif

结果还是老样子

上网查了下,找到:http://bobactive.blog.163.com/blog/static/27936141200932592235724/

以下是原文内容:

/开始//

multiple definition of XXX  

2009-04-25 21:22:35|  分类: 实验室里的学习 |字号 订阅

 

明明只定义了一次变量XXX,却被编译器告知:multiple definition of XXX
奇怪中,猜测,可能是与头文件的include有关。

代码如下:

 // ic.h
#ifndef __IC_H__
#define __IC_H__

float hisRatio=0.1;

/* other part omitted*/
#endif

 

 //ic.cpp

#include "ic.h"

float tmpValue=hisRatio;

/*other part omitted*/


编译输出信息:

 /tmp/ccAHyLaX.o:(.data+0x0): multiple definition of `hisRatio'
/tmp/ccLrvuCE.o:(.data+0x0): first defined here


想找到问题的找了很久,未果。

后来,参照别的常数的使用情况,在hisRatio的定义前面加上了const修饰。因为,在这个工程中,hisRation确实起到一个全局的常量。
结果,编译成功,问题消失了。

O,原来如此。
hisRatio是在另外的文件中定义的,如果是变量的话,在不同的文件中使用的话一般要求使用前加上extern修饰声明。
而,我的这个想被include进来使用。

总言之,常量前面加上const,就在所有include它的文件中可用了。

/结束/

实验结果发现可以给全局变量的定义前面加上const或static

转载于:https://www.cnblogs.com/beita/p/3176590.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值