<div dir="ltr"><div><div>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 (<a href="https://en.wikipedia.org/wiki/Pragma_once">https://en.wikipedia.org/wiki/Pragma_once</a>). 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.<br><br></div>Ciao,<br></div>Andrea<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">Il giorno 16 luglio 2015 12:28, Samuele <span dir="ltr"><<a href="mailto:samuele.zanin@tiscali.it" target="_blank">samuele.zanin@tiscali.it</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ho un problema con gli include in un programma C/C++.<br>
Non sono esperto di C, quindi ho bisogno di qualche indicazione.<br>
<br>
Ho un file ControlloBatteria.h<br>
con un'unica riga:<br>
<br>
void ControlloTestBatteria(TStatoSensore &DatiSensoreRete);<br>
<br>
che compilando mi da "Incomplete types is not allowed" e altri messaggi che si riferiscono al fatto che TStatoSensore non è definito.<br>
<br>
Il corpo della funzione è definito in ControlloBatteria.cpp.<br>
<br>
TStatoSensore è definito in SensoriRete.h<br>
<br>
class TStatoSensore {<br>
    public:<br>
    int LivelloBatteria;<br>
    int IdSensore;<br>
<br>
ecc. ecc.<br>
<br>
ed usato ampiamente in SensoriRete.cpp<br>
<br>
Nel main.cpp ho all'inizio:<br>
<br>
#include "VariabiliGlobali.h"<br>
#include "SensoriRete.h"<br>
#include "InputDigitali.h"<br>
#include "ElaborazioneStato.h"<br>
#include "Configurazione.h"<br>
#include "ControlloBatteria.h"<br>
#include "Seriale.h"<br>
<br>
<br>
Se all'inizio di ControlloBatteria.h aggiungo:<br>
#include "SensoriRete.h"<br>
<br>
ottengo: "Invalid redeclaration of type name TStatoSensore".<br>
<br>
ControlloBatteria.cpp<br>
ha queste include:<br>
#include "VariabiliGlobali.h"<br>
#include "ControlloBatteria.h"<br>
<br>
VariabiliGlobali.h non ha tra le include SensoriRete.h<br>
<br>
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.<br>
<br>
Non so dove sbattere la testa.<br>
<br>
<br>
_______________________________________________<br>
montellug mailing list<br>
<a href="mailto:montellug@montellug.it" target="_blank">montellug@montellug.it</a><br>
<a href="http://mail.montellug.it/mailman/listinfo/montellug" rel="noreferrer" target="_blank">http://mail.montellug.it/mailman/listinfo/montellug</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">Andrea Della Regina - <a href="mailto:manichen@gmail.com" target="_blank">manichen@gmail.com</a><br>"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</div>
</div>