c语言使用头文件调用其他文件函数时时链接错误,求指教~~

我写了一个栈的基本操作的ds3_seqStack2.cpp文件,函数声明和数据结构定义用了头文件ds3_seqStack2.h,然后写一个test.cpp文件includ... 我写了一个栈的基本操作的ds3_seqStack2.cpp文件,函数声明和数据结构定义用了头文件ds3_seqStack2.h,然后写一个test.cpp文件include这个.h文件以调用栈基本函数,但是连接报错,下帖代码,求指教
#include"stdio.h"
#include"stdlib.h"
#include "ds3_seqStack2.h"
int initStack(SqStack &s,int n) {
s.data = (char *)malloc(n);
if(s.data == NULL) {
printf("space alloction fail\n");
exit(0);
}
s.stackSize = n;
s.top = -1;
return 1;
}
int push(SqStack &s,char x) {
if(s.top == s.stackSize-1) {
printf("the stack is full\n");
return 0;
}
s.data[++s.top] = x;
return 1;
}
int pop(SqStack &s,char &x) {
if(stackEmpty(s)) {
printf("the stack is empty\n");
return 0;
}
x = s.data[s.top];
s.top--;
return 1;
}
int stackEmpty(SqStack s) {
if(s.top == -1) {
return 1;
}
return 0;
}
int stackLength(SqStack s) {
return s.top+1;
}
int clearStack(SqStack &s) {
s.top = 1;
return 1;
}
void stackTraverse(SqStack s) {
for(int i=0;i<s.top+1;i++) {
printf("%-3d",s.data[i]);
}
printf("\n");
}
#ifndef SEQSTACK2_H
#define SEQSTACK2_H
typedef struct stack {
char* data;
int top;
int stackSize;
}SqStack;
int initStack(SqStack &s,int n);
int push(SqStack &s,char x);
int pop(SqStack &s,char &x);
int stackEmpty(SqStack s);
int clearStack(SqStack &s);
int stackLength(SqStack s);
void stackTraverse(SqStack s);
#endif
#include"stdio.h"
#include"ds3_seqStack2.h"
int parenthesesMatch(char* s);
void main() {
char s[20];
printf("Please input a expressions\n");
scanf("%s",s);
if(parenthesesMatch(s)) {
printf("parentheses Match\n");
}else {
printf("parentheses doesn't Match\n");
}
}
int parenthesesMatch(char* str) {
SqStack s;
char x;
initStack(s,10);
while(*str) {
if(*str == '('|| (*str) == '[') {
push(s,*str);
str++;
}
else if(*str == ')') {
if(s.data[s.top] == '(') {
pop(s,x);
str++;
}
else {
return 0;
}
}
else if(*str == ']') {
if(s.data[s.top] == '[') {
pop(s,x);
str++;
}
else {
return 0;
}
}
else {
str++;
}
}
if(stackEmpty(s)) {
return 1;
}else {
return 0;
}
}
error LNK2001: unresolved external symbol "int __cdecl stackEmpty(struct stack)" (?stackEmpty@@YAHUstack@@@Z)
error LNK2001: unresolved external symbol "int __cdecl pop(struct stack &,char &)" (?pop@@YAHAAUstack@@AAD@Z)
error LNK2001: unresolved external symbol "int __cdecl push(struct stack &,char)" (?push@@YAHAAUstack@@D@Z)
抱歉,忘了区分了,代码是3个文件。#include"stdio.h"开始的分别是2个.cpp文件,#ifndef到#endif是.h文件
展开
 我来答
zhanghuaen
2012-08-01 · TA获得超过4017个赞
知道小有建树答主
回答量:836
采纳率:88%
帮助的人:808万
展开全部
我用vc2010测试了你的代码,没有连接问题,完全正确。
但是,如果从工程中,将ds3_seqStack2.cpp移除,再Build,将得到和你一样的链接错误。
因此,猜测你是没有将ds3_seqStack2.cpp加入工程。
追问
我是不同2个工程,在vc里~~上面大哥说的对,我就编译了2个cpp后就没问题了~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
man1473
2012-08-01 · TA获得超过223个赞
知道答主
回答量:155
采纳率:0%
帮助的人:109万
展开全部
函数声明放到函数定义前面。C语言习惯,C++好像可以不用。
调用其他文件里面函数时,应该有声明,用引入头文件的方法,则应该把函数的声明放到头文件里面。如果不采用引用头文件的方法,则加上外部声音。extern。
比如 a.cpp里定义f(c);在b.cpp里面调用f(c);方法一:在a.h里面声明f(c);如果在b.cpp里面引用a.h.方法二:在b.cpp里面加上外部声明。(C语言一般要求在引用前面声明,函数在调用之前定义可不用声明。C++里面没有这类限制,但是建议养成这个好习惯!)
追问
我这到底错哪呢。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
折咏志0hfd5a
2012-08-01 · TA获得超过279个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:243万
展开全部
test.cpp ds3_seqStack2.cpp需要一起编译。

以linux为例:
g++ -o test test.cpp ds3_seqStack2.cpp

下面是c文件的编译:
gcc -o test test.c ds3_seqStack2.c
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式