C++:fatal error LNK1169: 找到一个或多个多重定义的符号
2017-06-30 14:53
495 查看
错误:fatal error LNK1169: 找到一个或多个多重定义的符号
原因:我们都知道一般高级语言程序编译的过程其中有编译、链接两步这两步:
1.编译是源代码生成obj二进制目标文件的过程, 注意一个源代码文件(指.cpp, 而非.h, .h已经被包含进.cpp中了)生成一个obj文件, 由于编译是独立的, 所以在两个独立的编译单元里是可以有重名的函数和变量的。例如
编译之后b.obj和c.obj都包含了变量n的定义。
2.而在链接时,需要保证定义在整个程序中有且仅有一份,此时链接b.obj和c.obj就会发现有两个地方定义了变量n,就会提示fatal error LNK1169: 找到一个或多个多重定义的符号错误,所以这个错误是编译时出现的。
也就是但我们定义一个变量在一个头文件时a.h,如果有b.cpp和c.cpp都include了,此时就会提示fatal error LNK1169: 找到一个或多个多重定义的符号错误。也就是如果一个定义了变量的头文件(a.h)被多处include了,就有可能出现链接失败。
参考:
http://blog.csdn.net/q191201771/article/details/6399820
http://blog.sina.com.cn/s/blog_6af956630100voy9.html
原因:我们都知道一般高级语言程序编译的过程其中有编译、链接两步这两步:
1.编译是源代码生成obj二进制目标文件的过程, 注意一个源代码文件(指.cpp, 而非.h, .h已经被包含进.cpp中了)生成一个obj文件, 由于编译是独立的, 所以在两个独立的编译单元里是可以有重名的函数和变量的。例如
a.h int n=10; b.cpp include "a.h" c.cpp include "a.h"
编译之后b.obj和c.obj都包含了变量n的定义。
2.而在链接时,需要保证定义在整个程序中有且仅有一份,此时链接b.obj和c.obj就会发现有两个地方定义了变量n,就会提示fatal error LNK1169: 找到一个或多个多重定义的符号错误,所以这个错误是编译时出现的。
也就是但我们定义一个变量在一个头文件时a.h,如果有b.cpp和c.cpp都include了,此时就会提示fatal error LNK1169: 找到一个或多个多重定义的符号错误。也就是如果一个定义了变量的头文件(a.h)被多处include了,就有可能出现链接失败。
参考:
http://blog.csdn.net/q191201771/article/details/6399820
http://blog.sina.com.cn/s/blog_6af956630100voy9.html
相关文章推荐
- (转载和原创)关于解决C++“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- C++ “error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- VS2010中C++ 出现fatal error LNK1169: 找到一个或多个多重定义的符号
- C++ “error LNK1169: 找到一个或多个多重定义的符号” 解决方法
- C++杂记:“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- fatal error LNK1169: 找到一个或多个多重定义的符号
- error LNK1169: 找到一个或多个多重定义的符号
- fatal error LNK1169: 找到一个或多个多重定义的符号.
- C++程序运行时,未找到已定义的符号
- error LNK1169: 找到一个或多个多重定义的符号”的解决方法
- 找到一个或多个多重定义的符号
- "error LNK1169: 找到一个或多个多重定义的符号"另外的解决办法
- fatal error LNK1169: 找到一个或多个多重定义的符号
- class std::basic_string 找到一个或多个多重定义的符号
- “fatal error LNK1169: 找到一个或多个多重定义的符号”解决方法
- error LNK1169: 找到一个或多个多重定义的符号
- fatal error LNK1169: 找到一个或多个多重定义的符号
- vs2010 fatal error LNK1169: 找到一个或多个多重定义的符号
- VC中“找到一个或多个多重定义的符号”的解决方法
- fatal error LNK1169: 找到一个或多个多重定义的符号