关于"找到一个或多个多重定义的符号"问题的解决

在测试的时候突然心血来潮,把clearCMD.cpp的函数实现合并到clearCMD.h中,也就是说在函数声明的时候就写好函数实现,这样可以减少一个程序文件,修改完之后就一直报下面的错误:

即使使用了#ifndef…#define也没有用,因为它是为了防止嵌套调用的,而实际上TestRM_UnAutoTestSingleNode.cpp和TestRM_UnAutoTestMultiNode.cpp并没有嵌套调用,而是分别调用。

解决办法很简单,在clearCMD.h中,将成员变量前面加上extern,函数(非类函数)前面加上inline就可以啦!

时间: 2024-11-04 18:37:47

关于"找到一个或多个多重定义的符号"问题的解决的相关文章

error LNK1169: 找到一个或多个多重定义的符号”的解决方法(转载)

问题描述如下: 有 三个源文件,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:   找到一个或多个多重定义的符号"的错误. 经过分析,确定了这是由于两个实现文件中重复包含了头文件而造成的.可解决方法却始终找不到. 要 注意的是,在这里,在头文件中加入

vc 找到一个或多个多重定义的符号

vc 找到一个或多个多重定义的符号, 这个问题还是不能很好的解决. 最根本的是: 把所有有关定义的部分都放在.cpp文件中,对应的.h文件中只放声明.这样在#include ""的时候就可以完全避免出现符号重定义的现象. 万一真的碰到这种情况,可以试着用以下两种方法解决一下: 1.VS2005中,在项目->属性->链接器->命令行->附加选项中加 /force 可以解决问题,但会出现警告 2.在多重定义的符号前加static标识,可以很好的解决 申明全局变量,全

全局变量重复定义,fatal error LNK1169: 找到一个或多个多重定义的符号

1.在GlobeValue.h中定义了一个变量: char gl_UID[256]; 2.在b.cpp和e.cpp中分别引用GlobeValue.h,并且使用gl_UID的全局变量, 结果出现:fatal error LNK1169: 找到一个或多个多重定义的符号 的错误. 错误的原因:因为在gl_UID全局变量是在GlobeValue.h中定义的,所以呢,每次包含一次这个头文件时,相当于又定义了一个这样的变量. 正确的代码书写方法是:在GlobeValue.h中使用extern char gl

[debug] 解决在C++编写过程中的“找到一个或多个多重定义的符号”

如下图: 其在 common.h 中定义了一个变量a ,然后在两个 cpp 文件中都是用它. 在这种情况下,链接时就会出现 “找到一个或多个多重定义的符号”. 解决方案: 在某个cpp文件中定义,然后在 common.h 中是用 extern 在外部声明这个变量. 建立:变量的定义建立放在cpp中,在 头文件中加一个 extern 即可. 原文地址:https://www.cnblogs.com/onetrainee/p/11961511.html

出现“error LNK1169: 找到一个或多个多重定义的符号”的原因

或许,有人真的会这样写程序吧...所以才会碰到如下哥们提出的问题. https://zhidao.baidu.com/question/131426210.html 出现这种问题的原因链接中的最佳答案说得很清楚了,也确实是这样,所以在.h文件中最好不要涉及全局变量,这样容易在#include的时候出现重定义的问题,把全局变量的定义放到.cpp文件中,既增强代码的规范性,也不会引起不必要的错误,挺好~

fatal error LNK1169: 找到一个或多个多重定义的符号

申明全局变量,全局函数一定要在cpp中申明,其他类引用该全局变量就include该cpp的h文件,然后extern一下就好了.否则容易出现该重复定义错误. 这个"容易"是如何解释的呢? 例如 A.h 中如果申明了全局变量 int Global; 在 B.h 中 include "A.h" ..... extern int Global; ...... 则你 include A.h 相当于把 A.h 中全局变量的申明也 include 进来了,编译器就会认为是重复定义

VC编译错误:一个或多个多重定义的符号

1>uafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" ([email protected]@Z) 已经在 LIBCMT.lib(new.obj) 中定义1>uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" ([email prote

fatal error LNK1169:找到一个或多个重定义的符号

这个算是个比较基础的问题,由于我不是C程序员,本行java,临时拉来做的,所以有些坑还得自己走出来. 这个问题是由于,全局变量在a.h中定义,在两个源文件a.cpp和b.cpp中引用,之后被编译器认为是重定义. 解决办法: 全局变量要在源文件中声明和定义.a.cpp. 至于a.cpp中引用的头文件,a.h,需要在定义时加extern. b.cpp引用a.h即可. extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时,在其它模块中寻找其定义.另外,e

给出一个区间[a, b],计算区间内“神奇数”的个数。 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。 比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。

给出一个区间[a, b],计算区间内"神奇数"的个数.神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数.比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数.同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数. 输入描述: 输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000). 输出描述: 输出为一个整数,表示区间内满足条件的整数个数 输入例子: 11 20 输出例子: 6 1 #in