[MontelLUG] Problema include/dipendenze in programma C

Andrea Della Regina manichen a gmail.com
Gio 16 Lug 2015 12:46:43 CEST


Dovresti usare sempre o la direttiva di compilazione "#pragma once" negli
include file oppure incapsulare le dichiarazione e le eventuali include
annidate con dei "#ifndef ... #define ... #endif" o include guard (
https://en.wikipedia.org/wiki/Pragma_once). Per la massima compatibilità
dovresti usare la seconda soluzione. Se segui questo consiglio vivi sonni
tranquilli, altrimenti ti sbatterai sempre in casini di questo tipo dovuto
a #include annidate difficili da tracciare, meglio lasciare che sia il
compilatore a gestire la cosa. Gli editor più evoluti dovrebbero gestire
l'inserimento automatico di include guard.

Ciao,
Andrea


Il giorno 16 luglio 2015 12:28, Samuele <samuele.zanin a tiscali.it> ha
scritto:

> Ho un problema con gli include in un programma C/C++.
> Non sono esperto di C, quindi ho bisogno di qualche indicazione.
>
> Ho un file ControlloBatteria.h
> con un'unica riga:
>
> void ControlloTestBatteria(TStatoSensore &DatiSensoreRete);
>
> che compilando mi da "Incomplete types is not allowed" e altri messaggi
> che si riferiscono al fatto che TStatoSensore non è definito.
>
> Il corpo della funzione è definito in ControlloBatteria.cpp.
>
> TStatoSensore è definito in SensoriRete.h
>
> class TStatoSensore {
>     public:
>     int LivelloBatteria;
>     int IdSensore;
>
> ecc. ecc.
>
> ed usato ampiamente in SensoriRete.cpp
>
> Nel main.cpp ho all'inizio:
>
> #include "VariabiliGlobali.h"
> #include "SensoriRete.h"
> #include "InputDigitali.h"
> #include "ElaborazioneStato.h"
> #include "Configurazione.h"
> #include "ControlloBatteria.h"
> #include "Seriale.h"
>
>
> Se all'inizio di ControlloBatteria.h aggiungo:
> #include "SensoriRete.h"
>
> ottengo: "Invalid redeclaration of type name TStatoSensore".
>
> ControlloBatteria.cpp
> ha queste include:
> #include "VariabiliGlobali.h"
> #include "ControlloBatteria.h"
>
> VariabiliGlobali.h non ha tra le include SensoriRete.h
>
> Il tutto è compilato usando un ambiente online che si appoggia sul gcc e
> toolchain gnu-arm per crosscompilare e altri casini che non ho indagato.
>
> Non so dove sbattere la testa.
>
>
> _______________________________________________
> montellug mailing list
> montellug a montellug.it
> http://mail.montellug.it/mailman/listinfo/montellug
>



-- 
Andrea Della Regina - manichen a gmail.com
"Fonder des bibliothèques, c'était encore construire des greniers publics,
amasser des réserves contre un hiver de l'esprit, qu'à certains signes,
malgré moi, je vois venir." M. Yourcenar, Mémoires d'Hadrien
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://mail.montellug.it/pipermail/montellug/attachments/20150716/06f2b316/attachment.html>


Maggiori informazioni sulla lista montellug