gpt4 book ai didi

c - 多重定义 ... 链接器错误

转载 作者:太空狗 更新时间:2023-10-29 16:20:00 24 4
gpt4 key购买 nike

我定义了一个特殊的文件:config.h

我的项目也有文件:

t.c, t.h
pp.c, pp.h
b.c b.h
l.cpp

和#includes:

在 t.c 中:

    #include "t.h"
#include "b.h"
#include "pp.h"
#include "config.h"

在公元前:

    #include "b.h"
#include "pp.h"

在 pp.c 中:

    #include "pp.h"
#include "config.h"

在 l.cpp 中:

    #include "pp.h"
#include "t.h"
#include "config.h"

在我的*.h 文件中没有include 指令,只有在*.c 文件中。我在 config.h 中定义了这个:

const char *names[i] =
{
"brian", "stefan", "steve"
};

并且在 l.cpp、t.c、pp.c 中需要该数组,但我收到此错误:

pp.o:(.data+0x0): multiple definition of `names'
l.o:(.data+0x0): first defined here
t.o:(.data+0x0): multiple definition of `names'
l.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [link] Error 1

我在项目中使用的每个 *.h 文件中都包含了守卫。有帮助解决这个问题吗?

最佳答案

不要在标题中定义变量。将声明放在 header 中,将定义放在其中一个 .c 文件中。

在config.h中

extern const char *names[];

在一些 .c 文件中:

const char *names[] = { 
"brian", "stefan", "steve" };

如果你把一个全局变量的定义放在一个头文件中,那么这个定义将转到每个包含这个头文件的.c文件,你会得到多重定义错误,因为一个变量可能被声明多次但可以只定义一次。

此外,如果您必须在头文件中定义变量,您还可以做一件事,您可以使用 static 关键字。

static const char *names[] = {
"brian", "stefan", "steve" };

这样变量 names 将在整个程序中只定义一次,并且可以多次访问。

关于c - 多重定义 ... 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17764661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com