精华内容
下载资源
问答
  • 特别时做大项目的时候,难免会有重复定义这种问题的出现,下面我来介绍一下如何减少重复定义这种错误。 首先就是一定要规范的进行封装函数,这点非常的重要。例如宏定义的变量不要放入“.h”文件中进行封装,如果放...

    在这里插入图片描述
    广西●河池学院

    广西高校重点实验室培训基地

    系统控制与信息处理重点实验室

    本篇博客来自河池学院:智控无人机小组

    写作时间:2020.08.16

    关于函数重复定义的解决方法和如何避免重复定义

    重复定义,这是一个调用函数的常规问题,非常常见。特别时做大项目的时候,难免会有重复定义这种问题的出现,下面我来介绍一下如何减少重复定义这种错误。

    首先就是一定要规范的进行封装函数,这点非常的重要。例如宏定义的变量不要放入“.h”文件中进行封装,如果放入,容易发现错误,再有就是一些延时函数的重复定义问题,个人建议最好将延时函数都封装在一个“.h”文件下,再将所有的头文件都封装在一个“.h”文件里面,这样主函数就干净了许多,重复定义问题也少了许多,所以写代码一定要规范,这会避免很多的问题。

    如果发现了重复定义问题,请不要慌,我的解决方法如下:
    

    (1) 报错栏找到重复定义错误的函数名称。

    (2) CTRL+F跳入如图下处理界面中查找此函数在都在哪里
    在这里插入图片描述

    在Find what这一栏中填入重复定义的函数名,点击Find Next进行对此函数的查找。(注意Look in这一栏要选Current Project这个选项)。

    (3)
    修改函数就可以完成了。

    展开全文
  • 防止变量重复定义、头文件重复包含、嵌套包含,里面详细介绍如何防止变量重复定义及头文件重复包含嵌套问题。对于对头文件不是很了解的,可心下载学习。
  • 数据结构重复定义错误 分析: 头文件中的数据结构定义引用一次就行,但函数可以使用多次,所以会出现数据结构重复定义多次的错误 解决方法: 可以把数据结构和函数声明分开定义 一般情况下数据结构定义时也要...

    错误:

    数据结构重复定义错误

    分析:

    头文件中的数据结构定义引用一次就行,但函数可以使用多次,所以会出现数据结构重复定义多次的错误

    解决方法:

    可以把数据结构和函数声明分开定义

    一般情况下数据结构定义时也要加上#ifndef和#endif,防止因为多次包含该头文件而造成的重复定义的错误

    如:我的atom.h文件,

    #ifndef ATOM_H
    #define ATOM_H

    数据结构定义

    #endif

    展开全文
  • 主要给大家介绍了关于C/C++语言中全局变量重复定义问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • 防止全局变量重复定义

    千次阅读 2014-08-17 09:34:08
    但是依然出现重复定义问题 分析: ifndef这套条件编译是为了防止同一个.c文件中包含多个相同.h文件的(比如有一个.c文件包含了a.h,a.h又包含了b.h,那么当你在这个.c文件中同时包含了a.h和b.h时,因为有上面的条件...

    问题:

    在.h文件中定义了全局变量

    并用

    #ifndef identifier_h
    #define identifier_h
    ....
    #endif

    但是依然出现重复定义问题

    分析:

    ifndef这套条件编译是为了防止同一个.c文件中包含多个相同.h文件的(比如有一个.c文件包含了a.h,a.h又包含了b.h,那么当你在这个.c文件中同时包含了a.h和b.h时,因为有上面的条件编译的关系而不会出错)。因为编译器在编译的时候是按照.c文件为单位编译的,每个.c文件编译成.o文件(linux系统)或者.obj(windows系统),然后再将这些.o文件链接起来,最后与运行库链接形成可执行文件(elf或exe文件)。你在两个.c文件中包含了同一个.h文件。这根本和条件编译没什么关系。你在.h文件中定义了全局变量a, b, c。那么就表示你两个.c文件中,每个.c文件中都有这样的全局变量定义:int a, b, c;当每个.c文件单独编译当然没有问题,但是当它们链接起来的时候就出现问题了:两个.c文件中都有变量a b c,所以当然是重复定义啊。问题是出在链接的时候的。

    解决方案:

    在头文件中声明时 加入extern

    在使用的文件中定义变量 不需要加extern

    展开全文
  • test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义。vi test.cincludeinclude “test.h”extern i; extern void test1(); extern ...

    test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义。

    vi test.c


    include

    include “test.h”

    extern i;
    extern void test1();
    extern void test2();

    int main()
    {
    test1();
    printf(“ok\n”);
    test2();
    printf(“%d\n”,i);
    return 0;
    }

    vi test.h


    ifndef TEST_H

    define TEST_H

    char add1[] = “www.shellbox.cn\n”;
    char add2[] = “www.scriptbox.cn\n”;
    int i = 10;
    void test1();
    void test2();

    endif

    vi test1.c


    include

    include “test.h”

    extern char add1[];

    void test1()
    {
    printf(add1);
    }

    vi test2.c


    include

    include “test.h”

    extern char add2[];
    extern i;

    void test2()
    {
    printf(add2);
    for (; i > 0; i–)
    printf(“%d-“, i);
    }

    Makefile


    test: test.o test1.o test2.o
    test1.o: test1.c
    test2.o: test2.c
    clean:
    rm test test.o test1.o test2.o

    错误:
    test-1.0编译后会出现”multiple definition of”错误。

    错误分析:
    由于工程中的每个.c文件都是独立的解释的,即使头文件有

    ifndef TEST_H

    define TEST_H

    ….

    enfif

    在其他文件中只要包含了global.h就会独立的解释,然后每个.c文件生成独立的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。

    解决方法
    在.c文件中声明变量,然后建一个头文件(.h文件)在所有的变量声明前加上extern,注意这里不要对变量进行的初始化。然后在其他需要使用全局变量的.c文件中包含.h文件。编译器会为.c生成目标文件,然后链接时,如果该.c文件使用了全局变量,链接器就会链接到此.c文件 。

    注解:c/c++就这么规定:不可以在.h里定义变量,因为就是会触发这个重复定义错误。你只能在.h里用extern bool a;这样声明变量。

    全局变量的定义就应当放在C文件里。然后在H文件里,用extern做外部声明。在需要用这个变量的源文件里包含上面这个H文件。

    因为#include 是把后面的文件展开 就是static了,展开后还是两份它为每个include它的文件生成一份数据,编译是对每个.cpp文件做的操作。

    你这个重复定义可以通过编译, 但是在将多个.cpp编译出来的.obj文件链接成一个exe文件时就会有同一个变量在几个obj中都有定义, 这样就出错了, 链接器不知道到底该链接哪个定义的变量

    ifndef GLOBAL_DEFINE

    define GLOBAL_DEFINE

    endif

    // 这个只是用来防止Global.h被重复inlcude,在循环递归include中。只能防止你在一个源文件里,重复包含了头文件。

    宏定义是局部有效的,就是在同一个编译单元中,也就是一个cpp文件。另外一个cpp文件再次判断#ifndef GLOBAL_DEFINE仍然会为TRUE。
    你的情况是,有好几个源文件都各自包含了这个头文件,那么,当然,头文件里的变量就在几个源文件里都定义了
    注解end

    test-2.0

    vi test.c


    include

    include “test.h”

    int i = 10;
    char add1[] = “www.shellbox.cn\n”;
    char add2[] = “www.scriptbox.cn\n”;
    extern void test1();
    extern void test2();

    int main()
    {
    test1();
    printf(“ok\n”);
    test2();
    printf(“%d\n”,i);
    return 0;
    }

    vi test.h


    ifndef TEST_H

    define TEST_H

    extern i;
    extern char add1[];
    extern char add2[];

    void test1();
    void test2();

    endif

    vi test1.c


    include

    include “test.h”

    void test1()
    {
    printf(add1);
    }

    vi test2.c


    include

    include “test.h”

    void test2()
    {
    printf(add2);
    for (; i > 0; i–)
    printf(“%d-“, i);
    }

    展开全文
  • android中自定义属性重复定义

    千次阅读 2017-09-11 11:33:03
    在开发过程中,我们会遇见自定义属性重复定义问题。一般比较常出现的场景是在编译时把所有引用的包一起编译,这样每个包中的自定义属性就会出现冲突。解决方法有如下几种 1 在xml文件前面部分把重复定义的属性提前...
  • 在头文件重复包含和变量重复定义的错误提示中多半会包含这样一个单词----redefinition一、如何避免头文件重复包含1. 为何要避免头文件重复包含的原因?在编译c或c++程序时候,编译器首先要对程序进行预处理,预处理...
  • 问题:如何在C++中定义全局变量时避免重复定义呢? 今天遇到问题,全局变量重定义错误,印象中记得要加extern,但是怎么都不对,找资料后得到了解决方案,记之。(参考文献:...
  • 头文件重复定义的问题&宏定义

    千次阅读 2015-01-05 17:20:38
    1. 头文件重复定义的问题 头文件包含其实是一件很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。我仅就...
  • C++重复定义

    千次阅读 2011-05-16 18:07:00
    最近这两天在做一个C++的小项目,主要用于文本的分析。...类结构如下: 先完成了各个模块 ,最后在链接各个模块时却出现了一个重复定义:error lnk2005!不多说先上代码:这个是myThreadPool类://MyThrea
  • 在用C语言开发大型的工程中,由于文件众多,在各种机缘巧合下会出现全局变量重复定义,那假如出现这种情况是什么现象呢 首先来看看一个全局变量重复定义用例 例一: testA.c文件 #include <stdio.h> #...
  • typedef重复定义的一种解决方法

    千次阅读 2019-09-21 02:52:13
    与#define不同,typedef... 一个解决方法是,在包含第二个库时使用#define将重复定义的类型名改掉。 例如,如果头文件sm_system.h和math.h中均包含"typedef xxxx float_t"语句,那么使用如下的头文件包含方法: ...
  • C/C++中的重复定义bug

    千次阅读 2016-03-07 21:20:07
    使用不当很容易出现重定义的bug可以重复声明,不可以重复定义   在.h头文件中,变量如果没有初始化就是声明;初始化了就是定义。所以很多代码里面,都把变量的声明放在.h文件中当作全局变量使用,这是可以的,但...
  • C/C++_宏定义多次重复定义

    万次阅读 2015-09-10 18:18:32
    $MS编译器下宏多次重复定义以最后的作为标准 #include using namespace std; #define MAX 5 #define MAX 4 #define MAX 3 int main() { printf("%d\n", MAX); return 0; }
  • C++中的函数重复定义问题

    千次阅读 2019-07-22 16:49:30
    头文件中直接写函数实现会出现重复定义的错误,但是如果是在类中直接写函数实现就不会出现此错误,原因是两个cpp都包含该头文件,相当于头文件中的同一个函数实现被编译了两次,那么就出现了二义性问题,即调用该函数的...
  • ​ 今天在一个.h头文件中定义了一个全局变量,然后在两个.cpp文件中引用了该头文件,导致变量重复定义问题。 ​ 我们知道,变量有声明和定义,声明可以有多次,但是定义只能有一次。打个比方: //a.h文件 int a; ...
  • 我写的杭电的2025题,还没完全写完,但是遇到了一个问题 下面是我写的代码: #include #include using namespace std;...会报i重复定义。...但是我的i只是定义在每一个for循环里面的,为什么会报重复定义
  • 【C语言】变量被重复定义

    千次阅读 2017-10-12 13:25:47
    如果在头文件中声明变量,然后在不同的源文件中都调用该头文件,会导致编译器报错,说变量被重复定义,(即使写了#ifndef xxxxx也不行)。 解决的方法是在对应的.c文件中声明该变量,在头文件中extern该变量。
  • 关于C/C++头文件重复定义的思考

    千次阅读 2014-10-17 19:34:38
    重复定义是书写程序中经常遇到的问题。下面将分析为什么会出现重复定义的问题,怎么解决重复定义的问题。只需要写代码的一个好的书写习惯。不管项目多么大,重复定义再也不会出现。
  • 今天移植一个C++代码段,移植完编译时候提示“multiple definition of function”,多个函数提示重复定义。 首先给出解决法方案,找到这些“重复定义”的函数所在的头文件,然后在函数定义前加“inline”关键字。.....
  • 程序编译的时候遇到了一个重复定义的问题,研究一下发现自己在编译和链接过程中还有一些不清楚的地方,发文章总结一下。 几个问题: 头文件中只可以放置函数声明,不可以放置函数定义吗? 为什么有些头文件中...
  • 避免头文件重复引入和重复定义

    千次阅读 2017-08-18 11:32:48
    由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,条件编译指令会使得编译时间相对较长,因此一些编译器逐渐开始支持 #pragma once 的方式。 1.2 使用pragma once指令 pragma ...
  • 为什么只定义了一遍的deng,会出错误提示重复定义。 Error: L6200E: Symbol deng multiply defined (by inf.o and main.o). Error: L6200E: Symbol deng multiply defined (by test.o and main.o). Not ...
  • NSIS——un.onGUIInit 重复定义

    千次阅读 2014-08-11 16:36:34
    问题:un.onGUIInit 重复定义  情况:我是用了MUI 的现代界面,与那里定义的onGUIInit定义重复。 提示信息: Function: ".onGUIInit" 错误: 函数名 ".onGUIInit" 已经存在。 解决方法: ;...
  • namespace解决C++中重复定义问题
  • 如何解决头文件重复含问题   #ifndef 、#define、#endif的作用是: (1)防止宏的重复定义 (2)防止有文件的重复包含 #ifndef _A_H_ #define _A_H_ 。。。。。 #endif  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,400,484
精华内容 560,193
关键字:

重复定义