加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C程序中使用C函数; “多重定义”错误

发布时间:2020-12-16 10:16:48 所属栏目:百科 来源:网络整理
导读:我试图在已编写的C程序中使用 this code for the Porter stemming algorithm.我按照文件末尾附近的说明将代码用作单独的模块.我创建了一个文件,stem.c,它在定义之后结束并且有 extern int stem(char * p,int i,int j) ... 它在Xcode中工作得很好,但是在使用g
我试图在已编写的C程序中使用 this code for the Porter stemming algorithm.我按照文件末尾附近的说明将代码用作单独的模块.我创建了一个文件,stem.c,它在定义之后结束并且有

extern int stem(char * p,int i,int j) ...

它在Xcode中工作得很好,但是在使用gcc 4.1.1的Unix上它不起作用 – 奇怪,因为通常我在两者之间移动没有问题.我收到了错误

ld: fatal: symbol `stem(char*,int,int)’ is multiply-defined:
(file /var/tmp//ccrWWlnb.o type=FUNC; file /var/tmp//cc6rUXka.o type=FUNC);
ld: fatal: File processing errors. No output written to cluster

我看过网上看起来似乎有很多我可能有错的东西,但我不确定头文件,extern“C”等的组合是什么样的.

解决方法

该错误意味着符号(词干)在多个模块中定义.

您可以根据需要在多个模块中声明符号.函数声明如下所示:

int stem(char * p,int j);

你不需要“extern”关键字,虽然它不会伤害任何东西.对于函数声明,它是隐含的.

函数的定义如下所示:

int stem(char * p,int j) 
{
    /* body of your function */
}

“乘法定义”错误表示您有两个模块,其中包含相同功能的定义.这通常意味着您有两个定义函数的文件,或两个#include定义函数的文件的文件.通常,您不应将函数定义放在#include的文件中.将定义放在.c,.cpp或.cc文件中,只需在.inc文件中放入声明即#include.

例如,您可以在其中创建一个带有此文件的stem.h文件:

int stem(char * p,int j);

然后,#include“stem.h”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读