PDA

Visualizza la versione completa : [C] Inclusioni di file header (.h)


Vincent
27-01-2007, 15:37
Non ho mai avuto questo tipo di problema...

Vi spiego, ho creato un progetto, in questo ci vari moduli:

Motore.h

che contiene le dichiarazioni di tutte le strutture dati utilizzate nel programma.

Poi ho creato 3 moduli: Save, Load e Utility, ognuno dei quali richiama il suo header: esempio in Save.c faccio #include "Save.h" e cos via

In Ogni header file includo #include "Motore.h"

Ora Ho decisco di creare un nuovo modulo Cerca.c -> Cerca.h

Se provo a utilizzare una void che ho dichiarato in Utility, mi dice che la funzione non definita... Anche in Cerca.c ho fatto #include "Cerca.h", d in Cerca.h, #include "Motore.h"

Spero di essermi spiegato... :dh:

oregon
27-01-2007, 15:39
No ...

Vincent
27-01-2007, 15:39
Altra cosa: Nonostante nel Motore.h ho incluso tutte le librerie che mi servono tipo string.h in Cerca.c mi dice getch() undeclared.... come possibile???

Vincent
27-01-2007, 15:42
allora ho un progetto in Dev.


1) Motore.h contenente tutte le dichiarazioni delle strutture dati, e le librerie che uso
2) main, inutile che commento.
3) Load.c e Load.h, in Load.h richiamo Motore.h ed inserisco le firme delle funzioni utilizzate nel .c

cos per tutti gli altri files...

Solo che se voglio utilizzare una funzione dichiarata in un altro file il compilatore se ne frega, e mi dice che le funzioni non sono dichiarate...

oregon
27-01-2007, 15:50
Fai un esempio ...

Vincent
27-01-2007, 15:59
Motore.h




/* Inclusione delle librerie utilizzate dai vari moduli */
#include <stdio.h> /* Operazioni di Input/Output */
#include <stdlib.h> /* Definizioni della Libreria Standard */
#include <malloc.h> /* Allocazione Dinamica della memoria */
#include <string.h> /* Operazioni sulle stringhe */
#include <math.h>

typedef struct StringList
{

char Stringa[512];
struct StringList *Next;

} XML;




Utility.c



#include "Utility.h"

void Warning
(
char *Message
)
{

system( "CLS" );
printf( "\n\n %s \n\n " , Message );
system( "PAUSE" );
system( "CLS" );

}




Utility.h




#include "Utility.h"

void Warning( char *Message );



Cerca.c




#include "Cerca.h"

int Cerca
(
XML *Lista,
char *str
)
{
...............
..................
.................. Non scrivo le operazioni altrimenti sarebbe troppo lungo

---------
else
Warning( "ERRORE, non trovato");

}


Cerca.h




#include "Motore.h"

int Cerca( XML *Lista, char *str );



Spero che vada meglio, cmq in sostanza mi dice che Warning non definita che come questa tutte le funzioni che richiamo...in cerca.c

oregon
27-01-2007, 16:05
In Cerca.c devi aggiungere

#include "Utility.h"

Vincent
27-01-2007, 16:07
ci ho provato mi dice 36
......---.....\Motore.h previous definition of `struct StringList'

oregon
27-01-2007, 16:11
Per ogni file header aggiungi delle linee per garantire una inclusione unica ... ad esempio per Motore.h scrivi



#ifndef MOTORE_H
#define MOTORE_H

/* Inclusione delle librerie utilizzate dai vari moduli */
#include <stdio.h> /* Operazioni di Input/Output */
#include <stdlib.h> /* Definizioni della Libreria Standard */
#include <malloc.h> /* Allocazione Dinamica della memoria */
#include <string.h> /* Operazioni sulle stringhe */
#include <math.h>

typedef struct StringList
{

char Stringa[512];
struct StringList *Next;

} XML;

#endif

Vincent
27-01-2007, 16:20
fatto per ogni header file...

adesso mi dice

[Linker Error] undefined reference to `Warning(char *Message)'
ovviamente lo stesso messaggio anche per le altre funzioni "condivise" dai moduli...

Loading