LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1230|回复: 6

build Test.exe时出错,请教!!!

[复制链接]
发表于 2005-5-24 19:44:27 | 显示全部楼层 |阅读模式
我自己写了一些串的函数在文件(串的堆实现.c)中,编译通过,有写了如下一段(仅测试其中的几个函数):[CODE]

#include
#include
#include "c:\串的堆实现.c"
main(){
char chars1[]="HelloWorld!";
char chars2[]="computer";
HString *S; //HString是自定义的串类型
HString T;
StrAssing(S,chars1); //由字符常量chars1生成串S
StrPrint(*S); //打印S
StringCopy(&T,*S); //由串S生成新串T
StrPrint(T);
}
[\CODE]

单独编译此程序也通过,在build该程序时有如下错误:
--------------------Configuration: Text1 - Win32 Debug--------------------
Linking...
串的堆实现.obj : error LNK2005: _StrAssing already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrCopy already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrEmpty already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrCompare already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrLength already defined in Text1.obj
串的堆实现.obj : error LNK2005: _ClearString already defined in Text1.obj
串的堆实现.obj : error LNK2005: _Concat already defined in Text1.obj
串的堆实现.obj : error LNK2005: _Substring already defined in Text1.obj
串的堆实现.obj : error LNK2005: _Index already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrDelete already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrInsert already defined in Text1.obj
串的堆实现.obj : error LNK2005: _Replace already defined in Text1.obj
串的堆实现.obj : error LNK2005: _StrPrint already defined in Text1.obj
Text1.obj : error LNK2001: unresolved external symbol _StringCopy
Debug/Text1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Text1.exe - 15 error(s), 0 warning(s)

可能是重复定义了,我又#include的句子都去了,把"串的堆实现.c"文件加到project中,结果又有了如下的错误:
C:\Text1.c(4) : error C2065: 'HString' : undeclared identifier
C:\Text1.c(4) : error C2065: 'T' : undeclared identifier
C:\Text1.c(4) : error C2065: 'S' : undeclared identifier
C:\Text1.c(5) : warning C4013: 'StrAssing' undefined; assuming extern returning int
C:\Text1.c(6) : warning C4013: 'StrPrint' undefined; assuming extern returning int
C:\Text1.c(6) : error C2100: illegal indirection
C:\Text1.c(7) : warning C4013: 'StrCopy' undefined; assuming extern returning int
C:\Text1.c( : error C2100: illegal indirection
Error executing cl.exe.

Text1.exe - 5 error(s), 3 warning(s)

1.我在c文件中有HString结构的定义,函数也都有返回类型的定义,这些错是什么原因呢?请指教!
2.如果在linux中编译,遇到这样的问题怎么解决?
发表于 2005-5-24 21:09:17 | 显示全部楼层
你好像还没搞清楚.h和.c文件都是干什么用的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-24 21:54:38 | 显示全部楼层
我现在重新改了一下,建有三个文件:
1.一个头文件t.h(放入了所有的#include语句和串的结构定义)。
2.一个源文件string.c(放的是所有串的操作的函数),其中有#include "t.h"。
3.又一个源文件Test.c(对2中的操作函数的测试程序),其中有#include "string.c"。

我先编译string.c通过,再编译Test.c就又出现了错误:
string.obj : error LNK2005: _StrAssing already defined in Text1.obj
string.obj : error LNK2005: _StrCopy already defined in Text1.obj
string.obj : error LNK2005: _StrEmpty already defined in Text1.obj
string.obj : error LNK2005: _StrCompare already defined in Text1.obj
string.obj : error LNK2005: _StrLength already defined in Text1.obj
string.obj : error LNK2005: _ClearString already defined in Text1.obj
string.obj : error LNK2005: _Concat already defined in Text1.obj
string.obj : error LNK2005: _Substring already defined in Text1.obj
string.obj : error LNK2005: _Index already defined in Text1.obj
string.obj : error LNK2005: _StrDelete already defined in Text1.obj
string.obj : error LNK2005: _StrInsert already defined in Text1.obj
string.obj : error LNK2005: _Replace already defined in Text1.obj
string.obj : error LNK2005: _StrPrint already defined in Text1.obj

请教我如何解决???!!!
回复 支持 反对

使用道具 举报

发表于 2005-5-24 22:10:41 | 显示全部楼层
一般.h和.c是取相同的名字,比如t.h和t.c(原string.c),然后test.c中只用include "t.h"
t.c中的所有函数原型都应放到t.h中
你用什么环境?VC?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-25 06:53:37 | 显示全部楼层
是的vc,那如果在linux中编译也是这样吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-25 13:56:45 | 显示全部楼层
帮帮我,我的问题还没能解决!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-25 16:04:05 | 显示全部楼层
我又将函数库文件该名为t.c,头文件为t.h在linux中用如下命令编译:
gcc -c t.c
gcc -c test.c (一楼的测试程序,只写了一点就编译看看的)
gcc -o test test.o t.o
结果大体和在vc6中一样,也是说重复定义!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表