我定义了一个特殊文件: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
将在整个程序中仅定义一次,并且可以多次访问。