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文件 展开
#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文件 展开
3个回答
展开全部
我用vc2010测试了你的代码,没有连接问题,完全正确。
但是,如果从工程中,将ds3_seqStack2.cpp移除,再Build,将得到和你一样的链接错误。
因此,猜测你是没有将ds3_seqStack2.cpp加入工程。
但是,如果从工程中,将ds3_seqStack2.cpp移除,再Build,将得到和你一样的链接错误。
因此,猜测你是没有将ds3_seqStack2.cpp加入工程。
追问
我是不同2个工程,在vc里~~上面大哥说的对,我就编译了2个cpp后就没问题了~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数声明放到函数定义前面。C语言习惯,C++好像可以不用。
调用其他文件里面函数时,应该有声明,用引入头文件的方法,则应该把函数的声明放到头文件里面。如果不采用引用头文件的方法,则加上外部声音。extern。
比如 a.cpp里定义f(c);在b.cpp里面调用f(c);方法一:在a.h里面声明f(c);如果在b.cpp里面引用a.h.方法二:在b.cpp里面加上外部声明。(C语言一般要求在引用前面声明,函数在调用之前定义可不用声明。C++里面没有这类限制,但是建议养成这个好习惯!)
调用其他文件里面函数时,应该有声明,用引入头文件的方法,则应该把函数的声明放到头文件里面。如果不采用引用头文件的方法,则加上外部声音。extern。
比如 a.cpp里定义f(c);在b.cpp里面调用f(c);方法一:在a.h里面声明f(c);如果在b.cpp里面引用a.h.方法二:在b.cpp里面加上外部声明。(C语言一般要求在引用前面声明,函数在调用之前定义可不用声明。C++里面没有这类限制,但是建议养成这个好习惯!)
追问
我这到底错哪呢。。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
test.cpp ds3_seqStack2.cpp需要一起编译。
以linux为例:
g++ -o test test.cpp ds3_seqStack2.cpp
下面是c文件的编译:
gcc -o test test.c ds3_seqStack2.c
以linux为例:
g++ -o test test.cpp ds3_seqStack2.cpp
下面是c文件的编译:
gcc -o test test.c ds3_seqStack2.c
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询