error LNK1169: 找到一个或多个多重定义的符号 经典的错误

分享到:
  来源:急速科技  发布时间:2013-07-25  浏览次数:6134

  error LNK2019 无法解析的外部符号

     刚学C++不久,今天在VS2012下测试一个项目调用另外一个项目;结果出现 error LNK1169: 找到一个或多个多重定义的符号 。。。的错误。这个估计在C++中应该算是很经典的错误吧!

问题描述我想在OA.Core项目中实现两个字符转换的函数,首先在头文件中写了两个函数,结果在调用的时候出现了上面的错误,接着我又剪贴到cpp文件中,结果是直接显示未定义;这里估计是适应了C#的一些习惯,导致不知道在C++中怎么实现。

通过狂搜百度,以下引用网上的解决方法:

头文件不得包含变量定义和函数体,否则被包含一次,这些变量、函数就被重新定义,从而导致这个问题。把变量定义放到一个源文件中,然后在头文件中写成

extern bool bGolbal ;

看完之后明白:在头文件中只要声明就可以了,不能实现,就像在头文件中声明类中的方法一样。因此不管是函数,全局变量,方法只能在头文件中声明,在CPP文件中写具体实现代码。

头文件中的声明:

具体的代码在相应的CPP文件中实现。

其实这个问题在C++Primer这本书中有提到,只是现在代码写的少还没有达到学以致用的程度。

http://blog.csdn.net/goki123/article/details/5514737  中提到的另外一个解决办法,一下方法本人尚未验证:

当.h文件里有函数实现时
VS2005编译器报此错误,
解决方法 
1.在.h里的函数声明前加 inline

2.在项目->属性->链接器->命令行->附加选项中加   /force  

 

 

知识文章分类

C/C++

阅读排行