obj-m:=hello.o
hello-objs:=A.o B.o C.o
但是我的每个C文件都包含一个头文件D.h
D.h中定义了一些数据结构,可是make之后的结果说这些数据结构重复定义了,请问如何解决这个问题呢?
谢谢各位
15 个解决方案
#1
用#ifndef XXX
#define XXX
//xxxxxx
#endif
#define XXX
//xxxxxx
#endif
#2
用了,但是出现这个问题
#3
干脆不用h文件得了 ,在c文件中分别声明用到的数据结构啊。
#4
没理由呀,请LZ再仔细检查下代码。
注意#ifndef XXX
#define XXX
//xxxxxx
#endif
的位置
#5
定义和声明都没问题,但是我定义并初始化了一个数组,然后就说这个数组是重复定义了
#6
重复定义的话,编译器应该会给出你重复定义的具体位置啊,根据编译器给的信息应该就可以找出来啊
#7
是不是你在你的同文件里面定义变量了,并且变量不是static类型的,楼主你看看
#8
如果楼主的代码不是那么保密的话,可以放上来,或者将里面敏感的名称修改一下,这样有代码比较好办一些。
#9
数组的定义和初始化,不要放在头文件里。放到C文件里,然后在头文件里extern,这样include头文件的C文件也就都可以用了
#10
这个是关键,头文件中最好不要定义并初始化一个数组,头文件用extern,而在c文件定义并初始化
在啰唆几句:
1. 头文件中用extern是表示这个变量是在外部定义,此处要用到,但没有分配内存空间
2. 用#ifdefine。。。。。#endif包含头文件是为了防止在同一个源文件中包含某个头文件两次。为什么会出现这种状况呢?难道会有人写#include<XXX.h>两次?可以想想
#11
类型定义不分配内存的,比如类的定义,结构体的定义,它是定义一个数据类型而已
数据定义分配内存,比如类对象定义,变量定义
一个原则:
不分配内存的,放在头文件
分配内存的放在c 或cpp文件
数据定义分配内存,比如类对象定义,变量定义
一个原则:
不分配内存的,放在头文件
分配内存的放在c 或cpp文件
#12
有没有在.c里面,不上心再声明?
#13
先对上面积极回答我问题的各位道个歉,我这几天一直没上网,刚看到,谢谢各位的解答,没及时回复对不起了。
呃,可能我的表达有点不准确,代码不方便贴,出问题的地方我简单写下:
先是extern一些变量,具体的实现实在.c中,然后这些变量的引用我放在了以个数组中
extern A* a1;
extern A* a2;
extern A* a3;
A* table[] = {
&a1,
&a2,
&a3
};
这个头文件被两个.c文件include,然后我编译的时候就说table重复定义,并报错。
呃,可能我的表达有点不准确,代码不方便贴,出问题的地方我简单写下:
先是extern一些变量,具体的实现实在.c中,然后这些变量的引用我放在了以个数组中
extern A* a1;
extern A* a2;
extern A* a3;
A* table[] = {
&a1,
&a2,
&a3
};
这个头文件被两个.c文件include,然后我编译的时候就说table重复定义,并报错。
#14
当然这段代码是在
#ifndef XXX
#define XXX
//xxxxxx
#endif
中的
#ifndef XXX
#define XXX
//xxxxxx
#endif
中的
#15
在你的D.h文件中,加入
#ifndef __D_H
#define __D_H
.....
#endif
#ifndef __D_H
#define __D_H
.....
#endif
#1
用#ifndef XXX
#define XXX
//xxxxxx
#endif
#define XXX
//xxxxxx
#endif
#2
用了,但是出现这个问题
#3
干脆不用h文件得了 ,在c文件中分别声明用到的数据结构啊。
#4
没理由呀,请LZ再仔细检查下代码。
注意#ifndef XXX
#define XXX
//xxxxxx
#endif
的位置
#5
定义和声明都没问题,但是我定义并初始化了一个数组,然后就说这个数组是重复定义了
#6
重复定义的话,编译器应该会给出你重复定义的具体位置啊,根据编译器给的信息应该就可以找出来啊
#7
是不是你在你的同文件里面定义变量了,并且变量不是static类型的,楼主你看看
#8
如果楼主的代码不是那么保密的话,可以放上来,或者将里面敏感的名称修改一下,这样有代码比较好办一些。
#9
数组的定义和初始化,不要放在头文件里。放到C文件里,然后在头文件里extern,这样include头文件的C文件也就都可以用了
#10
这个是关键,头文件中最好不要定义并初始化一个数组,头文件用extern,而在c文件定义并初始化
在啰唆几句:
1. 头文件中用extern是表示这个变量是在外部定义,此处要用到,但没有分配内存空间
2. 用#ifdefine。。。。。#endif包含头文件是为了防止在同一个源文件中包含某个头文件两次。为什么会出现这种状况呢?难道会有人写#include<XXX.h>两次?可以想想
#11
类型定义不分配内存的,比如类的定义,结构体的定义,它是定义一个数据类型而已
数据定义分配内存,比如类对象定义,变量定义
一个原则:
不分配内存的,放在头文件
分配内存的放在c 或cpp文件
数据定义分配内存,比如类对象定义,变量定义
一个原则:
不分配内存的,放在头文件
分配内存的放在c 或cpp文件
#12
有没有在.c里面,不上心再声明?
#13
先对上面积极回答我问题的各位道个歉,我这几天一直没上网,刚看到,谢谢各位的解答,没及时回复对不起了。
呃,可能我的表达有点不准确,代码不方便贴,出问题的地方我简单写下:
先是extern一些变量,具体的实现实在.c中,然后这些变量的引用我放在了以个数组中
extern A* a1;
extern A* a2;
extern A* a3;
A* table[] = {
&a1,
&a2,
&a3
};
这个头文件被两个.c文件include,然后我编译的时候就说table重复定义,并报错。
呃,可能我的表达有点不准确,代码不方便贴,出问题的地方我简单写下:
先是extern一些变量,具体的实现实在.c中,然后这些变量的引用我放在了以个数组中
extern A* a1;
extern A* a2;
extern A* a3;
A* table[] = {
&a1,
&a2,
&a3
};
这个头文件被两个.c文件include,然后我编译的时候就说table重复定义,并报错。
#14
当然这段代码是在
#ifndef XXX
#define XXX
//xxxxxx
#endif
中的
#ifndef XXX
#define XXX
//xxxxxx
#endif
中的
#15
在你的D.h文件中,加入
#ifndef __D_H
#define __D_H
.....
#endif
#ifndef __D_H
#define __D_H
.....
#endif