Inspiegabile errore 'undefined reference to ...'

di il
4 risposte

Inspiegabile errore 'undefined reference to ...'

Buonasera.
Mi sono riavvicinato alla programmazione dopo diversi mesi di sospensione. Sono un vecchio programmatore che ha iniziato il suo hobby con l'assembler per l'IBM 360/370 e 7090. Nella mia stupidità, credevo che i miei pregressi fossero sufficienti per inoltrarmi nel c++, ma mi sbagliavo: ci sono troppe cose che non so e non riesco a risolvere. Inizio col dirvi quello che non mi fa andare avanti.
Innanzi tutto: sono su Linux, con l'IDE Qt-Creator impostato per usare Gtkmm e le maschere video realizzate con Glade. Veniamo al dunque.
Ho una classe che ha come membro-dati una struttura intabellata in una matrice a due dimensioni. Questa matrice serve in tutti i moduli dell'applicazione, avrei voluto renderla "static" ma credo di avere capito che le classi non si possono definire statiche, ma la struttura sì. Così nell'header della classe ho queste istruzioni:
#define COMBINAZIONIPREVISTE 101
#define DIMENSIONETABELLA 1000
static structTabIndicatori TabIndicatori [DIMENSIONETABELLA + 1] [COMBINAZIONIPREVISTE + 1];
In tutti i moduli .cpp che necessitano l'accesso a questa matrice ho inserito, prima di ogni altra cosa, l'istruzione:
extern structTabIndicatori TabIndicatori [DIMENSIONETABELLA + 1] [COMBINAZIONIPREVISTE + 1];
ma non riesco a capire come mai l'IDE mi riconosce i nomi della matrice e non mi segnala nessun errore, mentre a livello di compilazione ottengo l'errore "undefined reference to 'TabIndicatori' ". Oltretutto, sembra che questo errore ci sia solo per alcuni moduli e non per altri, a meno che non sia perché si ferma di elencare gli errori dopo un certo numero.
C'è qualche anima buona che mi può suggerire cosa dovrei fare per eliminare il problema ?
Vi ringrazio molto.

4 Risposte

  • Re: Inspiegabile errore 'undefined reference to ...'

    Non è inspiegabile, è l'errore classico di chi non ha capito come si fanno i moduli. Prendi esempio da un programma già fatto per vedere come organizzare define, definizioni di struct e extern, altrimenti posta tutto il codice (header e sorgenti)
  • Re: Inspiegabile errore 'undefined reference to ...'

    Grazie per la risposta.
    Non saprei come postare tutta la procedura, altrimenti lo farei, ma restando nelle cose terra-terra, una matrice definita static in un modulo, per poter essere utilizzata in un altro modulo quale accorgimento dovrei applicare ? Dalle risposte date in alcuni forum ho capito che extern è la voce da assegnare alle variabili statiche definite in un altro modulo, o dovrei applicare qualche altro stratagemma ?
  • Re: Inspiegabile errore 'undefined reference to ...'

    Static non c'entra nulla col discorso.
    Define, typedef struct e extern tutte in un header che può essere chiamato tramite include dai moduli, la matrice vera e propria la dichiari in un unico modulo. Inizia con matrici di int così cominci a capire come funziona il linker.

    Non ci sono scorciatoie che puoi trovare in un forum, è una cosa che o studi o impari sperimentando finché la compilazione va a buon fine
  • Re: Inspiegabile errore 'undefined reference to ...'

    Grazie. Forse ho capito una cosa che non sapevo: un medesimo modulo header può essere incluso in tutti i moduli, in aggiunta al modulo header definito per la creazione della classe particolare del modulo. Proverò così.
Devi accedere o registrarti per scrivere nel forum
4 risposte