Tôi có tập tin này đơn giản kiểm tra:tài liệu tham khảo không xác định đến <function name>
#include "stack.h"
int main()
{
Stack* stck = init_stack();
return 0;
}
và stack.h
được định nghĩa như sau:
#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
Hai tập tin nằm trong cùng thư mục. Nhưng khi tôi làm gcc ..
để xây dựng nó, tôi tiếp tục nhận được báo lỗi dưới đây:
$ 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
bất cứ ai có thể cho tôi biết những gì tôi đã làm sai ở đây?
Cảm ơn,
Làm cách nào để biết định nghĩa của 'init_stack' được sử dụng là gì? Mặc dù nó bao gồm C++, câu hỏi này có thể sẽ giúp bạn: http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i- sửa chữa – chris
Lưu ý rằng 'extern Stack * init_stack();' là một khai báo khá khác với 'extern Stack * init_stack (void);'. Việc đầu tiên nói có một chức năng nhưng danh sách đối số không được chỉ định (nó không phải là một hàm đối số biến, nhưng số lượng và kiểu của các đối số không được chỉ định). Thứ hai nói rằng hàm không có đối số. Không sử dụng ký hiệu ngoặc đơn trống trong C. Lưu ý rằng trong C++, dấu ngoặc đơn trống có nghĩa là giống như '(void)'. –
@JonathanLeffler Oh, wow! Tôi không bao giờ biết rằng! Tôi luôn luôn nghĩ rằng '(void)' chỉ là cách ưa thích của '()'. Cảm ơn! – user1508893