PDA

View Full Version : [C++] Organizzare file header di un progetto


Damage92
27-07-2010, 11:46
Salve!
Sto scrivendo un'applicazione in C++ (sto imparando il linguaggio).
Purtroppo sono incasinato con i file header, spero mi possiate aiutare!

Situazione: ho un file list.h e un file feed.h con le definizioni di alcune classi. Poi ci sono le loro implementazioni (list.c e feed.c). Ovviamente c'è anche il file principale main.c che contiene main().

Il problema è che la classe in feed.h deriva da una classe di list.h.
Per cui ho provato ad includere list.h in feed.c oppure in feed.h.
Però main.c ha bisogno di entrambi i file header per funzionare. Così li ho inclusi entrambi.
Poi compilo i file separatamente per ottenere i .o, infine compilo main.c.
Il risultato, ovviamente, è che mi dice che ho definito due volte quello che sta in feed.h.

Primo, grazie per aver letto fin qui :D
Secondo, c'è una logica da seguire per organizzare i file header? Quale errore concettuale ho commesso?

Torav
27-07-2010, 11:59
In generale può andare bene come hai fatto tu per quel che riguarda la gestione dei file ma ti conviene utilizzare delle macro definite ad hoc per evitare definizioni multiple. In soldoni ti conviene formattare gli header in questo modo: (es. prova.h)

#ifndef PROVA_H_
#define PROVA_H_

/* codice dell'header con definizioni e tutto il resto */

#endif

in questa maniera se il preprocessore (che si occupa della "gestione" delle macro) trova che la macro PROVA_H_ è già stata definita salta tutto il codice che c'è tra ifndef e endif. In ogni header aggiungi queste righe. Ricorda solo che devi definire una macro diversa in ogni header.

Damage92
02-08-2010, 09:43
Grazie, ho risolto con il define. :)

tomminno
02-08-2010, 11:25
Io suggerirei di usare al posto delle macro:

#pragma once

Torav
02-08-2010, 13:20
Io suggerirei di usare al posto delle macro:

#pragma once


Non è standard e dipende dal compilatore, secondo me è meglio usare il metodo delle macro, è più scomodo ma non ha problemi di compatibilità

tomminno
02-08-2010, 15:41
Non è standard e dipende dal compilatore, secondo me è meglio usare il metodo delle macro, è più scomodo ma non ha problemi di compatibilità

Tutti i principali compilatori lo supportano. Se non deve sviluppare per qualche micro particolare, non ha problemi di portabilità.