View Full Version : [c++] Problema con #include
Gio Games
21-01-2007, 19:05
Salve a tutti. Ho un problema durante la compilazione di un mio progetto formato da più file. Ho la necessità di includere un sorgente all'interno di uno che contiene già l'inclusione a quest'altro. Aspettate, mi spiego con un esempio. Ho il file A che contiene l'include al file B. Ora nel file B mi servirebbe fare l'include al file A ma al momento della compilazione mi si presentano centinaia di errori. Probabilmente sto cercando di fare una cosa impossibile ma anche se così fosse vi sarei grato se poteste spiegarmi bene cosa succede. Grazie a tutti per le eventuali risposte.
reptile9985
21-01-2007, 19:28
//file "nome.h"
#ifndef NOME_H
#define NOME_H
//tutti gli include che vuoi
//codice
//fine file
#endif
imposta in questo modo i tuoi header ;)
Gio Games
21-01-2007, 19:49
//file "nome.h"
#ifndef NOME_H
#define NOME_H
//tutti gli include che vuoi
//codice
//fine file
#endif
imposta in questo modo i tuoi header ;)
Ho già impostato così i file. Solo che io ho tra gli include i .cpp non i .h. Potrebbe essere questo il problema? Premetto che finora questa scelta non mi ha dato problemi.
trallallero
22-01-2007, 08:04
Ho già impostato così i file. Solo che io ho tra gli include i .cpp non i .h. Potrebbe essere questo il problema? Premetto che finora questa scelta non mi ha dato problemi.
beh t'é andata bene mi sa. Non che sia vietato includere i .cpp ma mi sembra il sintomo di un'analisi sbagliata. Magari un .cpp potrebbe includere un altro .cpp perché per motivi di dimensioni si é scelto di spezzarlo in 2 (in C l'ho fatto ma in C++ non me lo sogno neanche) ma non mi dire che un tuo .h include un .cpp ? :mbe:
brrrrr rabbrividisco :mbe:
Gio Games
22-01-2007, 12:52
beh t'é andata bene mi sa. Non che sia vietato includere i .cpp ma mi sembra il sintomo di un'analisi sbagliata. Magari un .cpp potrebbe includere un altro .cpp perché per motivi di dimensioni si é scelto di spezzarlo in 2 (in C l'ho fatto ma in C++ non me lo sogno neanche) ma non mi dire che un tuo .h include un .cpp ? :mbe:
No è un .cpp che include un altro .cpp. Mi puoi dire gentilmente perchè è "un'analisi sbagliata" includere un .cpp?
Grazie mille per la risposta comunque
No è un .cpp che include un altro .cpp.Appunto .... è sbagliato.
Mi puoi dire gentilmente perchè è "un'analisi sbagliata" includere un .cpp?Perché nei file sorgente .c/.cpp ci sono le definizioni di variabili e funzioni, mentre nei file di include .h (o .hpp o chiamali come vuoi), ci vanno solamente le dichiarazioni che non comportano una occupazione di memoria, in pratica solo dichiarazioni di macro/strutture, prototipi di funzioni ecc...
Immagina che in un file .cpp ci sia:
int pippo;
e che 2 altri sorgenti .cpp includano il .cpp sopra. Sai che succede? Casino, perché in entrambi i moduli oggetto generati c'è la variabile pippo!
trallallero
22-01-2007, 13:36
No è un .cpp che include un altro .cpp. Mi puoi dire gentilmente perchè è "un'analisi sbagliata" includere un .cpp?
Grazie mille per la risposta comunque
m'hanno preceduto :D
EDIT: in C il discorso é uguale ma a me é capitato di avere un limite sulle righe del file (Turbo C o Tandem, non ricordo) quindi ho diviso il file in 2, in uno le funzioni, nell'altro il main ed altro.
Ma sicuramente ero alle prime armi perché adesso farei una libreria col file delle funzioni e il modulo del main linkato con essa ;)
Gio Games
22-01-2007, 13:45
m'hanno preceduto :D
EDIT: in C il discorso é uguale ma a me é capitato di avere un limite sulle righe del file (Turbo C o Tandem, non ricordo) quindi ho diviso il file in 2, in uno le funzioni, nell'altro il main ed altro.
Ma sicuramente ero alle prime armi perché adesso farei una libreria col file delle funzioni e il modulo del main linkato con essa ;)
Il fatto è che io ho due classi. Nella prima mi serve utilizzar la seconda in una funzione e nella seconda mi serve utilizzare la prima in un altra funzione. Il fatto è che compilando mi da innumerevoli errori e non so come risolvere
trallallero
22-01-2007, 13:54
Il fatto è che io ho due classi. Nella prima mi serve utilizzar la seconda in una funzione e nella seconda mi serve utilizzare la prima in un altra funzione. Il fatto è che compilando mi da innumerevoli errori e non so come risolvere
allora potrebbe essere un problema di makefile.
Le classi é giusto che stiano in 2 files diversi e che abbiano i relativi .h ma il make lo deve sapere.
Posti l'istruzione per compilare o tutto il makefile ?
Il fatto è che io ho due classi. Nella prima mi serve utilizzar la seconda in una funzione e nella seconda mi serve utilizzare la prima in un altra funzione. Il fatto è che compilando mi da innumerevoli errori e non so come risolvere
non so te ma io rivedrei un poco la struttura delle tue classi. sicuramente c'è una soluzione migliore.
Gio Games
22-01-2007, 17:12
allora potrebbe essere un problema di makefile.
Le classi é giusto che stiano in 2 files diversi e che abbiano i relativi .h ma il make lo deve sapere.
Posti l'istruzione per compilare o tutto il makefile ?
Quindi dici che dovrei creare i .h e includere quelli vero?
Per quanto riguarda il makefile: in visual studio dove posso ricavare le istruzioni per il compilatore?
Energy++
22-01-2007, 18:43
brrrrr rabbrividisco :mbe:
tu rabbrividisci? dovevi vedere la mia faccia quando l'ho visto fare al mio prof di info nel laboratorio :muro: :nono:
tomminno
22-01-2007, 21:58
Il fatto è che io ho due classi. Nella prima mi serve utilizzar la seconda in una funzione e nella seconda mi serve utilizzare la prima in un altra funzione. Il fatto è che compilando mi da innumerevoli errori e non so come risolvere
Premesso, come ti hanno già suggerito, che andrebbe un pò rivista la struttura delle 2 classi, puoi risolvere il problema o con la forward declaration oppure se non ti servono variabili di classe, potresti includere i rispettivi header nei file cpp.
Forward declaration:
/*File A.h*/
#ifndef _A_H
#define _A_H
#include "B.h"
class A
{
...
private:
B * b;
};
#endif
/*File B.h*/
#ifndef _B_H
#define _B_H
class A;
class B
{
...
private;
A * a;
};
#endif
Includendo gli header nei cpp
/*File A.cpp*/
#include "A.h"
#include "B.h"
A::MetodoCheUsaB()
{
B b();
...
}
/*File B.cpp*/
#include "B .h"
#include "A.h"
B::MetodoCheUsaA()
{
A a();
...
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.