我有这个简单的测试文件:未定义参照<函数名>
#include "stack.h"
int main()
{
Stack* stck = init_stack();
return 0;
}
和stack.h
定义如下:
#ifndef STACK_H
#define STACK_H
#define EMPTY_STACK -1
typedef struct stack
{
char ch;
struct stack* prev;
} Stack;
extern Stack* init_stack();
extern char pop(Stack*);
extern void push(Stack*, char);
#endif
这两个文件都在同一目录中。但是,当我做gcc ..
构建它,我不断收到以下错误:
$ ls
stack.c stack.h teststack.c
$ gcc -o testit teststack.c
/tmp/ccdUD3B7.o: In function `main':
teststack.c:(.text+0xe): undefined reference to `init_stack'
collect2: ld returned 1 exit status
谁能告诉我,我做错了什么吗?
感谢,
它如何知道必须使用init_stack的定义?虽然它包含C++,但这个问题可能会帮助你:http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-doi-i-修复 – chris
请注意,'extern Stack * init_stack();'与'extern Stack * init_stack(void);'是一个完全不同的声明。第一个说有一个函数,但没有指定参数列表(它不是一个可变参数函数,但是没有指定参数的数量和类型)。第二个说这个函数没有参数。不要在C中使用空括号符号。请注意,在C++中,空括号表示与“(void)”相同。 –
@JonathanLeffler哦,哇!我从来不知道!我一直认为'(void)'是'()'的奇特方式。谢谢! – user1508893