1

我有这个头文件(称为 ft_opp.h),我试图在两个不同的 .c 文件中 #include :

#ifndef __FT_OPP_H__
# define __FT_OPP_H__
t_opp gl_opptab[] = {{"-", &ft_sub}, \
{"+", &ft_add}, \
{"*", &ft_mul}, \
{"/", &ft_div}, \
{"%", &ft_mod}, \
{"", &ft_usage}};
#endif /* __FT_OPP_H__ */

我别无选择,只能使用未更改的这个文件来定义 gl_opptab 数组(它是学校练习的一部分,我应该按原样使用这个文件)。

但是,编译后我不断收到来自 GCC 的以下消息:

重复符号 _gl_opptab 在:/var/folders/zz/zyxvpxvq6csfxvn_n0000hvc00046v/T//ccrPWPyP.o /var/folders/zz/zyxvpxvq6csfxvn_n0000hvc00046v/T//cc2JUzLs.o ld:1 个重复符号返回架构 x86_64 退出状态 collect2:ld制作:* [ft_advanced_do-op] 错误 1

我尝试将其仅包含在一个文件中并extern t_opp* gl_opptab在另一个 .c 文件中使用。但这似乎不起作用。

我怎么能那样做?

4

1 回答 1

2

extern t_opp* gl_opptab is not the same as the array of structs defined in the header. Try extern t_opp gl_opptab[]; in the other .c file. Of course the other .c file will need to know what a t_opp is, so there's at least one more header that'll need inclusion in the other .c file.

于 2013-07-29T22:59:20.393 回答