multiple definition of `xxxx`问题解决及其原理

    检查法典,确实的,我在.h寄给报社中界说了本人变量。,同样.h寄给报社收录在多个寄给报社中。,心不在焉孤独编制的成绩。,而是,当归结起来联系在一起时,在些许成绩。。

#ifndef _TEST_H_

#define _TEST_H_

……

struct pdesc const cameractrl_params[] = {
{PT_STRI_, 0,  1, OFFSET(cameractrl, homecmd), “homecmd”, 32, 0, NULL, NULL},
{PT_STRI_, 0,  1, OFFSET(cameractrl, zoomctrl), “zoomctrl”, 32, 0, NULL, NULL},
{PT_STRI_, 0,  1, OFFSET(cameractrl, focusctrl), “focusctrl”, 32, 0, NULL, NULL},
{PT_STRI_, 0,  1, OFFSET(cameractrl, aperturectrl), “aperturectrl”, 32, 0, NULL, NULL},
{PT_NULL_, 0,  0, 0, “”, 0, 0, NULL, NULL} /* PT_NULL means tail of struct pdesc array */
};

……

#endif

    通常,变量口供是在.h寄给报社中界说的。,在宁静文档中,以防收录.h寄给报社那就够了。,编制时,它将由编制器孤独解说。,过后,每个.c寄给报社将做本人孤独的编号和记分表。,故此,当孤独编制时,是你这么说的嘛!法典将不会出错。,语法书是合法的。。而是,够用,当编制器联系在一起时。,它将一致性举行控告说话中肯占有记分。,因寄给报社中有反复的变量。,过后将有反复的界说。,体系执意准时的你“multiple definition of `xxx`”。

  促进解说,我们家可以设想当编制每本人C源寄给报社时。,相当于被管道白昼渐短的纵向流变流淌。,这两人事栏将不会共有的阻止。。当连杆被创造时,两个彼此划分的管道流淌。,反复元素涌现。。故此,当联系在一起被引起时,会涌现本人反复的界说记分。。反复界说编号在嗨仅是变异的的。,效能将不会。因功能在C中只界说了一次。,多个口供心不在焉成绩。,变量有两种界说。。两个反复变量界说,联系在一起器不认识,因而弄错了。

  我们家以任何方法处理同样成绩?

  确实,您只必要从.h寄给报社T中羔羊皮全程变量界说那就够了。,过后应用.h在表面寄给报社中举行表面口供。。即在.c寄给报社中口供变量。,过后在占有变量被口供以前添加表面寄给报社到Head寄给报社.h。,在意,在.h寄给报社中,不要设定初值变量。。过后,必要应用全程变量的宁静.c寄给报社收录.h寄给报社。。编制器为.c做目的寄给报社。,过后联系在一起。,以防.c寄给报社应用全程变量,联系在一起器将联系在一起到.c寄给报社。。宁静寄给报社必要以平等的的方法应用同样全程变量。,确实,独自的本人。,这是为了使变量在内存中是只的。。

 加盖于,修正在上文中法典以使其特有的。:

胸怀界说

//

……

struct pdesc const cameractrl_params[] = {
{PT_STRI_, 0,  1, OFFSET(cameractrl, homecmd), “homecmd”, 32, 0, NULL, NULL},
    {PT_STRI_, 0,  1, OFFSET(cameractrl, zoomctrl), “zoomctrl”, 32, 0, NULL, NULL},
    {PT_STRI_, 0,  1, OFFSET(cameractrl, focusctrl), “focusctrl”, 32, 0, NULL, NULL},
    {PT_STRI_, 0,  1, OFFSET(cameractrl, aperturectrl), “aperturectrl”, 32, 0, NULL, NULL},
    {PT_NULL_, 0,  0, 0, “”, 0, 0, NULL, NULL} /* PT_NULL means tail of struct pdesc array */
};

……

胸怀界说

//

#ifndef _TEST_H_

#define _TEST_H_

……

extern struct pdesc const cameractrl_params[];

……

#endif

  这般,multiple definition of XXXX可感觉到的东西了。。

done

发表评论

Close Menu