2012-06-30 31 views
9

Sto riscontrando qualche problema nella compilazione di alcuni file utilizzando le intestazioni. Qui è una ripartizione del mio codice:Errore "riferimento non definito alla funzione"

file1.c

#include "header.h" 
int main() { 
    func1(); 
    return 0; 
} 

file2.c

#include "header.h" 
void func1() { 
    ... function implementation ... 
} 

header.h

void func1(); 


L'errore che sto ottenendo è:

In funzione 'main':
undefined reference to 'func1'

Nota: sto solo usando una semplice ripartizione di come i miei 3 file sono impostati. Ho bisogno di farlo funzionare con i 3 file. Sto impostando/includendo tutto correttamente? Ho bisogno di usare questa configurazione, ma non sono sicuro di come file.c si riferisca all'implementazione effettiva di func1().

+2

quale compilatore stai usando ?? puoi fornire la dichiarazione del compilatore? – mathematician1975

+3

Se si sta usando 'gcc -o programma file2.c file1.c', modificare questo in' gcc -o programma file1.c file2.c'. L'ordine è importante –

+0

Hmm, hai ragione che questo dovrebbe funzionare con la normale compilazione di gcc. Il problema è che questo problema per più è da un progetto molto grande, con centinaia di file. Ma la struttura del problema è la stessa. Ho solo pensato che forse non includevo le cose correttamente, ma immagino che non sia così. – Tesla

risposta

4

Se l'errore è un riferimento definito per func1(), e non c'è nessun altro errore, quindi vorrei che sia perché ci sono due file chiamati header.h nel progetto e l'altra copia è stata inclusa al posto della vostra copia con la dichiarazione di func1().

Vorrei controllare i percorsi di inclusione per il progetto e verificare che header.h con la vostra dichiarazione di func1() venga incluso per primo.

+0

Questo è tremendamente vecchio, ma mi sto imbattendo nel problema e apprezzerei l'aiuto. L'impostazione di base è la stessa di questa domanda, tranne che sono sicuro che venga inclusa l'intestazione corretta, perché alcune funzioni non danno riferimenti indefiniti e altre no. È solo strano, e se metto a rischio l'intestazione, il codice "correttamente" non viene compilato. –

Problemi correlati