“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
我遇到的情况是c++ stl
include
include
在stdafx.h 和*.cpp 重复了,所以出现此问题, 所以把依赖全放到一起了。
www.cnblogs.com/A-Song/archive/2012/03/23/2413782.html
问题描述如下: 有 三个源文件,A.h、B.cpp、C.cpp。 A.h是头文件,其中声明了三个变量a1、a2、 a3。 B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件。B.cpp和C.cpp中均包含头文件 A.h。 在编译时,编译能够通过,但链接时出了问题,出现”error LNK1169: 找到一个或多个多重定义的符号“的错误。 经过分析,确定了这是由于两个实现文件中重复包含了头文件而造成的。可解决方法却始终找不到。 要 注意的是,在这里,在头文件中加入#ifndef……#endif这样的预编译命令是没用的,因为这是防止嵌套包含头文件的,而本例中并没有嵌套包含,是 在两个文件中分别包含。 因为这三个变量在两个实现文件中都要用到,所以一定要包含在A.h中。后来在网上找到了解决方法,其实很简单。 就是在A.h中的三个变量声明前加上extern 关键字,然后在B.cpp中不加extern关键字再次声明这三个变量。于是编译链接顺利通过。 其实这是C++中比较基础的问题。 还有种情况是定义了函数,但在另个文件中准备用#include打开,但是结果还是会出现。 直接包含不就在两个cpp文件中都定义了相同的函数/变量吗,链接时会出现重复定义(你自己试试),所以需要使用extren申明一下即可,他们使用的是同一个实体。 例如: 1、你在a.cpp中定义了一个函数 void func() { } 希望在b.cpp中调用,调用前就需要进行声明,格式如下: extren void func(); //extren 后面根的形式和函数定义形式要完全相同 void mian() { func(); } 2、1、你在a.cpp中定义了一个变量 int a; 希望在b.cpp中使用,使用前就需要进行声明,格式如下: extren int a; //extren 后面根的形式和变量定义形式要完全相同 void main() { int b = a; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)