dispiace se questa è una domanda ripetuta, ma ho cercato in giro per un paio d'ore, e sto ricevendo risposte contrastanti ... e quel che è peggio, nessuno di loro stanno lavorando.Eclipse/GCC: undefined reference to EXTERN variabile
È una questione semplice. Ho molti file sorgente e ho alcuni parametri comuni che voglio essere in un singolo file, ad esempio "Parameters.h". Voglio impostare questi parametri (una volta) in fase di esecuzione, passandoli come argomenti al programma.
PS: So che un modo migliore di farlo è quello di passare tutto come argomenti di funzioni, ma è un pezzo grosso di codice e ho bisogno di ottenere un risultato ben presto senza fare troppi cambiamenti.
Ecco un minimo esempio di funzionamento:
Parameters.h
#ifndef PARAMETERS_H_
#define PARAMETERS_H_
extern int Alpha;
#endif
main.cpp
#include <iostream>
#include "Parameters.h"
int main(int argc, char * argv[])
{
const int Alpha = 12.0;
}
Functions.cpp
#include "Parameters.h"
double Foo(const double& x)
{
return Alpha*x;
}
Quando compilo con
gcc main.cpp Functions.cpp
ottengo l'errore "Functions.cpp :(testo + 0xa):. Undefined reference to` Alpha '".
Grazie mille! Il problema era, come dici tu, che non stavo definendo Alpha nello scope del file in main.cpp. Ora mi sento un idiota :-) Grazie ancora. – MGA
è necessario definire Alpha come 'extern 'considerando che la dichiarazione si trova in un file di intestazione? – ldgorman
@ldgorman: Se non si utilizza 'extern', quindi sarebbe una definizione, non solo una dichiarazione. Se quindi includi questa intestazione in più di un file sorgente, verrebbero visualizzati errori di linker relativi a più definizioni dello stesso simbolo. –