专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

关于在头文件中的一个异常

发布时间:2011-06-28 16:16:50 文章来源:www.iduyao.cn 采编人员:星星草
关于在头文件中的一个错误
使用的编译器是VS2010,一个solution下包含了2个h文件和3个cpp文件。
我在a.h(名字太长,我简化为头文件a)中定义了一个const变量
extern const int nLevel = 256;
然后在main.cpp里包含a.h,编译一切正常,链接给出错误,链接信息如下:
a.obj : error LNK2005: "int const nLevel" (?nLevel@@3HB) already defined in main.obj
1>F:\编程语言\OpenCV\HelloOpenCV\Debug\HelloOpenCV.exe : fatal error LNK1169: one or more multiply defined symbols found

问题是,我在main.cpp里根本就没有再定义该变量,我搜索也没有找到,我让我同学帮我找,他也没在除了a.h外的其他地方找到了声明nLevel的地方。好奇怪啊。
然后,我把extern const int nLevel = 256;注释掉
//extern const int nLevel = 256;
改为#define nLevel 256(在a.h里)
然后链接正确了。
我不知道是什么原因啊,求指教


------解决方案--------------------
extern指定的是在其它编译单元定义的变量,include头文件后就合成同一编译单元了,要么extern去了,要么在其它cpp中定义非extern描述的nLevel变量
------解决方案--------------------
你在别的文件中 #include "a.h" 了

extern const int nLevel = 256; //有初始化变为定义

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: