-
2021-05-25 02:48:08
fatal error LNK1169: 找到一个或多个多重定义的符号;这个问题出现的情况。
字面意思理解,有一个符号被多次定义,比如变量名,方法名。在C语言中,不像在java语言中,在不同的文件中,也不能使用相同的方法名。这个貌似涉及到了c语言的编译链接过程。
举个例子:
在文件FileDemo.cpp和FileDemo2.cpp中都有一个方法叫做readFile就会出现这个问题。
所以需要确定方法名不一样.
网上例子:
问题描述如下:
有 三个源文件,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;
}
更多相关内容 -
C语言多个文件都include同一个文件时报多重定义.unresolved external symbol,multiply defined symbols f
2020-12-15 20:28:47如何解决 C语言多个文件都include同一个文件时报多重定义的问题 unresolved external symbol,multiply defined symbols found 这是一个困扰C语言新手的问题 #include没毛病 但是用多了就出毛病 看代码,哪都没毛病 在... -
error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法
2021-05-25 04:05:501 问题还原这里我有三个源文件:Base.hpp, Base.cpp 和 main.cpp在Base.hpp里面定义一个基类,注意,基类只包含构造函数和析构函数的声明,函数在Base.cpp里实现。此外在Base.hpp中还有一个函数的定义(函数声明和...1 问题还原
这里我有三个源文件:Base.hpp, Base.cpp 和 main.cpp
在Base.hpp里面定义一个基类,注意,基类只包含构造函数和析构函数的声明,函数在Base.cpp里实现。
此外在Base.hpp中还有一个函数的定义(函数声明和定义都在Base.hpp文件中)三个文件代码如下。
Base.hpp
#ifndef VIRTUAL_H
#define VIRTUAL_H
#include
#include
using namespace std;
class Base{
public:
Base();
~Base();
private:
char *p;
};
void platform(Base *pBase){
cout << "this is just a function..." << endl;
}
#endif
Base.cpp
#include"Base.hpp"
Base::Base(){
cout << "construction function..." << endl;
}
Base::~Base(){
cout << "destructor function..." << endl;
delete p;
}
main.cpp
#include"Base.hpp"
#include
using namespace std;
int main(){
cout << "main..." << endl;
Base * pBase = new Base;
delete pBase;
system("pause");
return 0;
}
2 分析与解决方案
2.1 分析
定义类时,一般声明和实现分离,于是可将头文件中定义的类的构造函数,移到其对应的xxxx.cpp中,你会发现果然问题解决了。
实际上,xxxx.cpp由于包含了xxxx.h,而xxxx.h中包含了构造函数的实现,于是xxxx.cpp生成目标文件的时候,包含了构造函数的实现。而类的调用函数,如main.cpp也包含了xxxx.h,同样编译生成目标文件的时候,也会包含构造函数的实现。这样二者在链接阶段就会发现有两个一模一样的函数,出现了重定义的问题。
确定了这是由于两个实现文件(main.cpp 和 base.cpp)中重复包含了头文件而造成的。
要注意的是,在这里,在头文件中加入#ifndef……#endif这样的预编译命令是没用的,因为这是防止嵌套包含头文件的,而本例中并没有嵌套包含,是 在两个文件中分别包含。
2.2 解决
方法1:
只在头文件中声明函数,把函数定义都放到cpp文件中,本例中把platform函数的定义从Base.hpp文件中移到Base.cpp文件中。
把函数体放到cpp文件中后确实可行。
同理:如果在头文件中再定义一个变量:int a = 10; 那么由于头文件在两个cpp文件中都有被包含,也会出现类似的错误。
此时,需要把变量的定义放到Base.cpp文件中。
方法2:
在xxxx.h的类的函数定义处,加上inline。这样实际上是在调用处展开函数体代码,代替函数调用。从而避免重复定义的问题。
头文件
class xxxxx
{
public:
inline xxxxx(const Eigen::VectorXd &xData, const Eigen::VectorXd &yData);
private:
Eigen::VectorXd m_xData;
Eigen::VectorXd m_yData;
};
xxxxx::xxxxx( const Eigen::VectorXd &xData, const Eigen::VectorXd &yData)
{
m_xData = xData;
m_yData = yData;
}
参考文章
“error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)
解决方案: “error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载) 遇到的问题: 在.h头文件中采用namespace 命名空间报错 test.h namespace LMR ...
error LNK1169 找到一个或多个多重定义的符号的解决方法
问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. A.h是头文件,其中声明了三个变量a1.a2. a3. B.cpp是A.h中所声明的类的实现源代码,C.cpp是主程序文件.B.cpp ...
转载:“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
转载来自:http://www.cnblogs.com/A-Song/archive/2012/03/23/2413782.html 问题描述如下: 有 三个源文件,A.h.B.cpp.C.cpp. ...
全局变量重复定义,fatal error LNK1169: 找到一个或多个多重定义的符号
1.在GlobeValue.h中定义了一个变量: char gl_UID[256]; 2.在b.cpp和e.cpp中分别引用GlobeValue.h,并且使用gl_UID的全局变量, 结果出现:fat ...
【转载】“error LNK1169: 找到一个或多个多重定义的符号”的解决方法
-
fatal error LNK1169: 找到一个或多个多重定义的符号
2021-12-28 22:26:37fatal error LNK1169: 找到一个或多个多重定义的符号;这个问题出现的情况。主要是重定义(多次定义)了某些变量名/函数名。 今天遇到的这个我认为是写代码的规范不好而导致的Error!自己折腾了一会儿才解决,故用这...fatal error LNK1169: 找到一个或多个多重定义的符号;这个问题出现的情况。主要是重定义(多次定义)了某些变量名/函数名。
今天遇到的这个我认为是写代码的规范不好而导致的Error!自己折腾了一会儿才解决,故用这篇博客记录一下!
源码:
rational.h
#ifndef __RATIONAL_H__ #define __RATIONAL_H__ #include<iostream> #include<memory> using namespace std; class Rational { public: inline Rational(int numerator = 0, int denominator = 1) :m_Numerator(new int(numerator)), m_Denominator(new int(denominator)) {} Rational(const Rational& rhs); const Rational& operator=(const Rational& rhs); // const Rational& operator*(const Rational& rhs); inline int numerator()const { return *m_Numerator; } inline int denominator()const { return *m_Denominator; } void reviseNumerator(int val); void reviseDenominator(int val); inline ~Rational() { this->m_Numerator = nullptr;//置为nullpr! this->m_Denominator = nullptr;//置为nullpr! } private: std::shared_ptr<int> m_Numerator; std::shared_ptr<int> m_Denominator; }; //non-member operator* function ! const Rational operator*(const Rational& rhs1, const Rational& rhs2) { int t_numerator = rhs1.numerator() * rhs2.numerator(); int t_denominator = rhs1.denominator() * rhs2.denominator(); return Rational(t_numerator, t_denominator); } #endif //__RATIONAL_H__
rational.cpp
#include"rational.h" void Rational::reviseNumerator(int val) { m_Numerator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Numerator = std::make_shared<int>(val); } void Rational::reviseDenominator(int val) { m_Denominator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Denominator = std::make_shared<int>(val); } // const Rational& Rational::operator*(const Rational& rhs){ // this->reviseNumerator(*(m_Numerator) * rhs.numerator()); // this->reviseDenominator(*(m_Denominator) * rhs.denominator()); // return *this; // } Rational::Rational(const Rational& rhs) { m_Numerator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Numerator = std::make_shared<int>(rhs.numerator()); m_Denominator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Denominator = std::make_shared<int>(rhs.denominator()); } const Rational& Rational::operator=(const Rational& rhs) { m_Numerator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Numerator = std::make_shared<int>(rhs.numerator()); m_Denominator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Denominator = std::make_shared<int>(rhs.denominator()); return *this; }
在windows下写Cpp代码遇到以下错误时:
1>------ 已启动生成: 项目: Project3, 配置: Debug x64 ------ 1>rational.cpp 1>LINK : 没有找到 E:\C++learning\C++并发与多线程编程\Project3\x64\Debug\Project3.exe 或上一个增量链接没有生成它;正在执行完全链接 1>rational.obj : error LNK2005: "class Rational const __cdecl operator*(class Rational const &,class Rational const &)" (??D@YA?BVRational@@AEBV0@0@Z) 已经在 6.10.obj 中定义 1>E:\C++learning\C++并发与多线程编程\Project3\x64\Debug\Project3.exe : fatal error LNK1169: 找到一个或多个多重定义的符号 1>已完成生成项目“Project3.vcxproj”的操作 - 失败。 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
或者在linxu下写Cpp代码遇到以下错误时:
这其实都是同一个问题!即:
你在.h头文件中定义了非成员函数(non-member function)!这样别的.cpp文件多次对该.h头文件进行inlcude时就会将同一份函数多次include进不同的.cpp源文件来,这就导致了fatal error LNK1169: 找到一个或多个多重定义的符号的错误提示!这能Link链接才怪呢!!!
下面是把一份非成员变量的定义写在了上述的rational.h头文件中,同样会报相同fatal error LNK1169: 找到一个或多个多重定义的符号的错误!(此时是把同一份非成员变量include到多个不同的.cpp源文件中去了)
解决方法:把all的(non-member function)放在对应该.h的.cpp文件中即可deal!(是不是觉得很简单?)
是的,在日常coding Cpp代码时,可能会有非常多令人意外的Error!这都是因为平时写代码不太规范导致的!既浪费时间又浪费脑力!还吃力不讨好的!所有日后我们coding时,必须规范自己的代码!千万不能写一出想一出!
正确做法是:将non-member operator* function 另外放置于一个头文件并将其实现代码放在一个与头文件对应的.cpp源文件当中去!
RationalOperatorMultply.h:
#ifndef __RATIONALOPERATORMULTIPLY_H__ #define __RATIONALOPERATORMULTIPLY_H__ #include"rational.h" const Rational operator*(const Rational& rhs1,const Rational& rhs2); #endif //__RATIONALOPERATORMULTIPLY_H__
RationalOperatorMultply.cpp:
#include"RationalOperatorMultply.h" //non-member operator* function ! const Rational operator*(const Rational& rhs1,const Rational& rhs2){ auto t_numerator = rhs1.numerator() * rhs2.numerator(); auto t_denominator = rhs1.denominator() * rhs2.denominator(); return Rational(t_numerator,t_denominator); // or // return Rational(rhs1.numerator() * rhs2.numerator(), // rhs1.denominator() * rhs2.denominator()); }
rational.h:
#ifndef __RATIONAL_H__ #define __RATIONAL_H__ #include<iostream> #include<memory> using namespace std; class Rational{ public: inline Rational(int numerator = 0,int denominator = 1) :m_Numerator(new int(numerator)),m_Denominator(new int(denominator)){} Rational(const Rational& rhs); const Rational& operator=(const Rational& rhs); // const Rational& operator*(const Rational& rhs); inline int numerator()const { return *m_Numerator;} inline int denominator()const{ return *m_Denominator;} void reviseNumerator(int val); void reviseDenominator(int val); inline ~Rational(){ this->m_Numerator = nullptr;//置为nullpr! this->m_Denominator = nullptr;//置为nullpr! } private: std::shared_ptr<int> m_Numerator; std::shared_ptr<int> m_Denominator; }; #endif //__RATIONAL_H__
rational.cpp:
#include"rational.h" void Rational::reviseNumerator(int val){ m_Numerator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Numerator = std::make_shared<int>(val); } void Rational::reviseDenominator(int val){ m_Denominator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Denominator = std::make_shared<int>(val); } // const Rational& Rational::operator*(const Rational& rhs){ // this->reviseNumerator(*(m_Numerator) * rhs.numerator()); // this->reviseDenominator(*(m_Denominator) * rhs.denominator()); // return *this; // } Rational::Rational(const Rational& rhs){ m_Numerator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Numerator = std::make_shared<int>(rhs.numerator()); m_Denominator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Denominator = std::make_shared<int>(rhs.denominator()); } const Rational& Rational::operator=(const Rational& rhs){ m_Numerator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Numerator = std::make_shared<int>(rhs.numerator()); m_Denominator.reset();//让强引用计数-到0,也即释放原来的空间了! this->m_Denominator = std::make_shared<int>(rhs.denominator()); return *this; }
main.cpp:
#include<iostream> #include"person.h" #include"student.h" #include"rational.h" #include"RationalOperatorMultply.h" using namespace std; int main(void){ Rational oneEighth(1,8); Rational oneHalf(1,2); Rational res = oneEighth * oneHalf; res = oneHalf * 2;//oneHalf * int(2)==>oneHalf.operator*(2) *const Rational rhs(2);//√! res = 2 * oneHalf;//int(2) * oneHalf ==> const Rational rhs(2) * oneHalf;//√! cout<<"res's numerator = "<< res.numerator()<<" res's denominator = "<< res.denominator()<<endl; return 0; }
目前,我个人认为的Cpp规范的代码的书写格式为:
①:非成员函数/非成员变量一般都放在独立的.h头文件中并在对应的.cpp源文件中放其实现代码。
②:头文件防止重复包含的代码应该这么写:(不要偷懒只写一句#pragma once,因为不同的编译器有可能不兼容,要用各平台和编译器都兼容的方式来写)
#ifndef __XXX_H__ #define __XXX_H__ // codes #endif //__XXX_H__
③:类模板和函数模板也要放在.h头文件中,当然,因为是模板,因此类模板声明和实现放在同一个.h下ok的,函数模板的声明和实现放在同一个.h中也ok!
④:对于函数体({body;})比较少的函数,可以考虑用inline声明一下,虽然编译器不同,可能无法真正做到inline,但写了万一能做到inline呢?对吧,如果做到了还能提高你代码的效率呢!
后续coding学习时会继续补充!未完待续~
-
C++ 链接时出现多重定义问题
2022-04-29 14:51:35情形如下,我在头文件里定义了一个函数而不是声明,然后两个cpp文件都include了这个头文件,最后链接的时候就出现了以上问题。因为对编译的理解不够才导致了这个问题。 头文件如下: #ifndef HEADER_H #define ...我好像一直以来都以为编译链接的时候,在头文件里用了条件编译
#ifndef #define #endif
或pragma once
就不会出现multiple definition of xx
的问题,直到昨天…
情形如下,我在头文件里定义了一个函数而不是声明,然后两个cpp文件都include
了这个头文件,最后链接的时候就出现了以上问题。因为对编译的理解不够才导致了这个问题。
头文件如下:#ifndef HEADER_H #define HEADER_H #include <iostream> #include <string> using namespace std; void print(string &message) { cout << message << endl; } #endif
cpp1如下:
#include "header.h" void fun() { print("hello world"); }
main.cpp如下:
#include "header.h" extern void fun(); int main() { fun(); return 0; }
编译器每次编译一个文件时都会把
include
的头文件包括进来,所以在编译cpp1时,会定义一个print
的函数;在编译main时,又定义一个print
的函数,其实这时还没有产生错误。当我们链接这两个编译后的文件之后,才产生了多次定义错误。根据下图也能看到是链接器报错。
为什么
fun
函数没有报错?
因为在main里我是声明了fun
函数,在编译时编译器就知道别处有这样一个函数,在链接的时候看到cpp1里定义了fun
函数,于是把main的fun符号重定位到cpp1的fun
函数,所以最后调用的是cpp1定义的fun
函数(这里链接时链接器是如何做的我不是很清楚)头文件被包含多次时tips:
- 用const修饰的变量会默认对其他cpp文件不可见,所以在头文件里定义了
const int a = 1
并多次包含这个头文件不会保错。 - 对于类来说,似乎写在头文件class x{};括号里的内容都不产生这种错误。如下:
#ifndef HEADER_H #define HEADER_H #include <iostream> #include <string> using namespace std; class A { void print(){} //no error }; #endif
如果定义在类外同时在头文件中,会产生错误。如下:
#ifndef HEADER_H #define HEADER_H #include <iostream> #include <string> using namespace std; class A { void print(); }; void A::print(){} //error #endif
- 用const修饰的变量会默认对其他cpp文件不可见,所以在头文件里定义了
-
QT多重定义的问题
2019-05-31 10:09:00QT版本:Qt 5.5.1 (MSVC 2013, 32 bit...同事给了我一个做好的静态库.a文件,并给了我配套的头文件,结果头文件里面有全局变量,导致我的编译的时候一直报多重定义的错误。 理论上来说,我只要在头文件里面加上 #ifn... -
头文件多重定义问题(ifndef)
2019-05-08 16:07:07ifndef 宏定义 #ifndef和#endif配套使用,分别加在头文件的开头和结尾,避免再功能实现函数中出现多重定义的问题。 一般用法: -
LNK1169:找到一个或多个多重定义的符号
2021-12-12 11:18:35LNK1169:找到一个或多个多重定义的符号 说明:在学习数据结构时,在a.h文件中定义了全局变量,同时在a.h中使用了类模板 // a.h int countLeaf=0; template<class Elemtype> class BiTree { ... } 然后在a.... -
C:头文件中全局函数的多重定义错误
2021-05-20 00:44:31这个功能是全局的,在头文件中定义(暂时我想保留它).头文件也构成一个具有内联函数的特定类,其中一个函数调用这个全局函数.源文件不包含任何出现的全局函数.任何关于错误原因的提示?如果有人感兴趣,我可以发布代码.... -
VS2019 找到一个或多个多重定义的符号
2021-10-07 05:31:44出现的问题如下图所示: 后面发现了原因:同一个项目下的另一个cpp文件用了重复的头文件。 解决办法 将重复的头文件注释掉 删除无用的cpp文件(不建议) -
static成员变量的多重定义问题
2021-08-11 16:31:58static成员变量的多重定义问题 如果定义该变量的头文件只在一个cpp文件中被调用,那么可以在该头文件中初始化该静态变量;但是如果该头文件会被多个cpp文件调用就会出现多重定义问题; 解决方法: 在任意一个调用该... -
MFC/VS2017 找到一个或多个多重定义的符号怎么解决
2021-07-08 17:59:33编译时候报错:找到一个或多个多重定义的符号怎么解决。 解决办法 在一个cpp文件中又重新定义一次函数,找一找本cpp文件中与你包含的头文件中是否有同名函数,函数名和参数个数类型都一致,如果有把这个函数名在这个... -
keil编译出现多重定义的问题
2021-06-23 15:37:25错误提示是变量hadc1在main.c和adc.c中重复定义,但是我在main.c和adc.c中没有定义变量hadc1,这两个文件都include adc.h文件,我在adc.h文中定义了hadc1。这就是问题所在,main.c和adc.c都include了adc.h文件,相当... -
C++ 头文件.h 和 源文件.cpp 以及多重定义(multiple definition)
2020-02-19 00:45:10因为每个源文件都会被编译成一个目标文件(.obj),也就意味着多个目标文件都有同一个函数的定义,因此在最终对所有目标文件进行链接生成可执行文件时,就会出现函数多重定义的问题。 所以可以理解为 一个头文件会有... -
c++ 找到一个或多个多重定义的符号 不同情况的解决方法
2021-08-31 20:21:42重定义符合分析不同文件函数重名头文件没跟编译器说明白伪菱形包含other 不同文件函数重名 改掉就好,一般别人封装好的api都会放在一个namespace里面,自己写的也可以参考这种做法 头文件没跟编译器说明白 添加#pragma... -
债的多重定义及三大特征 (2001年)
2021-05-23 19:41:10债具有多重定义,即债的一般概念、法学概念和经济学概念;并具有三大特征,即法学特征、经济学特征和会计学特征。 -
C/C++多重定义实例
2018-10-29 21:11:56main.cpp #include #include #include "gh.h" int main() ...l两个*.o文件链接的时候:同一作用域出现两对属性完全一致的符号自然会出错,尽管你只定义了一个变量,但是在编译器眼里是2个同名变量. -
C++函数多重定义问题
2018-06-10 15:45:49那么就会出现函数多重定义的问题.C++在编译头文件的时候.已经找到了该函数的声明 和它的定义.再次调用头文件的时候。出现两个定义。而编译器不知道该选择哪个定义。所以会出现错误.#ifndef TEST_ONE_H#define... -
找到一个或多个多重定义的符号 c++
2021-11-17 10:42:12找到一个或多个多重定义的符号 c++ a.cpp文件需要用到b.cpp文件的函数 只需要在a.pp中#include"b.h"即可 全局变量define请放在cpp文件中 -
C++ Visual Studio报错:LNK1169: 找到一个或多个多重定义的符号————解决办法
2022-03-19 13:42:491、.h文件里的函数声明和定义都要加上inline 2、声明全局变量,全局函数一定要 在.cpp中声明 其他类引用该全局变量就include该.cpp对应的头文件,然后再extern一下 -
C++ Primer中&、*符号的多重定义与int *p和int* p的区别讲解
2020-08-26 02:49:39今天小编就为大家分享一篇关于C++Primer中&、*符号的多重定义与int *p和int* p的区别讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
C++头文件包含变量时,多重定义问题!
2018-10-15 16:20:21在头文件中.h中包含有变量定义的时候,一般是想作为全局变量来使用,但是使用中总是出现multiple definition of的问题,看一下: oracleinfclass.h #ifndef ORACLEINFCLASS_H_ #define ORACLEINFCLASS_H_ int i; ... -
Makefile运行出现多重定义问题
2018-12-08 17:19:28project1.h #include #include #include struct list ...main.o:(.bss+0x0): head 的多重定义 project1.o:(.bss+0x0):第一次在此定义 collect2: 错误:ld 返回 1 make: *** [Hello] 错误 1 -
C++ :找到一个或多个多重定义的符号解决办法
2020-05-07 13:19:10原因解释:...解决方法1: 如果对应的函数较短可以在前面加inline,将其变为内联函数 解决方法2: 头文件中只进行函数的定义,函数的实现放在源文件中 ... -
C++ error LNK1169: 找到一个或多个多重定义的符号
2020-05-09 13:39:29这里看到我有两个.cpp文件,但是我点击本地Windows调试器的时候,它会显示fatal error LNK1169: 找到一个或多个多重定义的符号错误,而且我将里面一个main函数改成main1的时候,它也只是运行了第一个cpp文件,也就是... -
fatal error LNK1169: 找到一个或多个多重定义的符号 解决方法
2019-05-05 10:34:361>C:\Users\lenovo\Documents\Visual Studio 2013\Projects\Hello\Debug\Hello.exe : fatal error LNK1169: 找到一个或多个多重定义的符号 ========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ========== ... -
C++ “error LNK1169: 找到一个或多个多重定义的符号”的解决方法
2020-07-03 11:41:29这是一个链接时候检查到的错误,大概有下面两种情况会引起这个错误。...编译能够通过,但链接时出了”errorLNK1169:找到一个或多个多重定义的符号“的错误。这是因为B.cpp包含头文件 A.h后,相当于又定义了变... -
解决:error LNK1169: 找到一个或多个多重定义的符号
2020-07-12 21:14:13error LNK1169: 找到一个或多个多重定义的符号 每一个c++项目中可以包含多个cpp文件和.h文件,不过只能有而且必须有一个cpp文件中包含main函数,否则就会报错。 在一个c++项目中不能单独运行一个cpp文件,只能... -
C++ VS2017 LNK 1169:找到一个或多个多重定义的符号
2020-01-04 11:04:181>E:\Project_File\VS\General_Mesh\Debug\general_mesh.exe : fatal error LNK1169: 找到一个或多个多重定义的符号 原因: FrontInfo.h中声明了变量,FrontInfo.cpp是FrontInfo.h中所声明的实现源代码,... -
c++多重定义:multiple definition of 问题解决
2020-09-04 12:05:19分析是因为两个函数重复定义了,我将每个函数分别加上static后,编译通过。于是上网看了下这个问题的其他现象及解决方法,参考别人,记录如下: 首先,最关键的,不要把全局变量以及全局方法的定义放在头文件里! ...