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

我的项目也有文件:

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

and #includes:

in t.c:

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

in b.c:

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

in pp.c:

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

in l.cpp:

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

我没有包含指示*.h文件,仅在*.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我在项目中使用的文件。解决这个问题吗?

答案

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

在config.h中

extern const char *names[];

在某些.c文件中:

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

如果将全局变量的定义放在头文件中,则该定义将转到包含该头文件的每个 .c 文件,并且您将收到多重定义错误,因为一个变量可能被声明多次,但只能定义一次

另外,如果您必须在标题文件内定义变量,则可以做一件事static关键词。

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

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

来自: stackoverflow.com