PDA

Visualizza la versione completa : [C++] Problemi con #include di header in più file


andry80
19-05-2005, 15:28
Salve a tutti!!
Ho un problema con l'inclusione, in un file.cpp, di classi esterne necessarie per il corretto fuzionamento.
Provo a spiegarmi con semplicità:
ho 3 classi:
base.h
cl1.h
cl2.h

cl1.h e cl2.h includono entrambe base.h;
Il file del main()(di nome exec.cpp) include sia cl1.h che cl2.h

Beh..Quando vado a compilare mi da il seguente errore:

In file included from cl1.h:10,
from exec.cpp:5:
base.h:28: redefinition of `class base'
base.h:28: previous definition here
In file included from cl2.h:10,
from exec.cpp:5:
base.h:28: redefinition of `class base'
base.h:28: previous definition here

anx721
19-05-2005, 15:53
prova a mettere all'inizio di base.h le seguenti due righe:

#ifndef BASE_H
#define BASE_H

e alla fine del file metti:

#endif


questa cosa dovrebbe in generale esse fatta con tutti gli include file (cambiando di volta in volta BASE_H in base al nome del file)

kentaromiura
19-05-2005, 16:44
Originariamente inviato da anx721
prova a mettere all'inizio di base.h le seguenti due righe:

#ifndef BASE_H
#define BASE_H

e alla fine del file metti:

#endif


questa cosa dovrebbe in generale esse fatta con tutti gli include file (cambiando di volta in volta BASE_H in base al nome del file)
:master:
intendi:


#ifndef BASE_H
#define BASE_H
#include "base.h"
#endif

anx721
19-05-2005, 21:33
No, quelle righe le devi mettere nel file base.h

andry80
20-05-2005, 09:35
Grazie Anx , funziona alla grande!!!
Ti ringrazio

:yuppi:
:ciauz:

melos
26-08-2007, 18:36
qualcuno mi spiega com'è che funzionano queste direttive,cosa fanno,e come risolvono il problema di Andry80!!Grazie :dhò:

andbin
26-08-2007, 19:05
Originariamente inviato da melos
qualcuno mi spiega com'è che funzionano queste direttive,cosa fanno,e come risolvono il problema di Andry80!!Grazie :dhò: È un 'idioma' utilizzato nei file di header per evitare i problemi di una inclusione multipla e si basa sulla definizione di una macro che ovviamente deve essere unica in tutto il progetto (e in genere appunto si usa NOME_H o __NOME_H__ o cose del genere).

"se non è definito BASE_H, definisci BASE_H e prendi in considerazione il resto"

È chiaro che una successiva inclusione fa in modo che la condizione #ifndef BASE_H sia "falsa", quindi nulla viene più preso in considerazione.

melos
27-08-2007, 15:59
Grazie andbin...6 stato + che chiaro!! :)

Loading