ho questo semplice file di test:undefined reference to <nome funzione>
#include "stack.h"
int main()
{
Stack* stck = init_stack();
return 0;
}
e stack.h
è definito come segue:
#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
Questi due file sono nella stessa directory. Ma quando faccio gcc ..
costruirlo, continuo a ricevere l'errore sotto:
$ 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
Qualcuno potrebbe dirmi che cosa ho fatto di sbagliato?
Grazie,
Come fa a sapere dove deve essere la definizione di "init_stack'? Anche se include C++, questa domanda probabilmente ti aiuterà: http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i- fix – chris
Si noti che 'extern Stack * init_stack();' è una dichiarazione abbastanza diversa da 'extern Stack * init_stack (void); '. Il primo dice che c'è una funzione ma l'elenco degli argomenti non è specificato (non è una funzione di argomenti variabili, ma il numero e i tipi degli argomenti non sono specificati). Il secondo dice che la funzione non accetta argomenti. Non usare la notazione di parentesi vuota in C. Nota che in C++ le parentesi vuote significano '(void)'. –
@ JonathanLeffler Oh, wow! Non l'ho mai saputo! Ho sempre pensato che '(void)' è solo il modo elegante di '()'. Grazie! – user1508893