View Full Version : [C++] problemi con gli header miei
Vecchia Spugna
12-09-2006, 13:35
Allora ragazzi ho un problemaccio. non sono capace di farmi una mia libreria corretta poichè al momento della compilazione mi da errore il linker.
premetto che uso borland c++
allora suddivido il mio bel listato in 3 files:
un header.h dove ho messo la dichiarazione delle classi
un header.cpp dove ho incluso header.h ed ho definito le funzioni di classe
un main.cpp dove ho incluso header.h ed ho definito la funzione main.
A questo punto sorge il problema: dovrebbe essere corretto in questo modo, invece l'unico modo per compilare è invece che includere header.h metterci header.cpp, allora funziona.
l'errore che mi da è come se non trovasse la definizione delle funzioni di classe in header.cpp
se senza che vi incollo il codice riuscite a dirmi dove sbaglio ok.. altirmenti lo incollo.
grazie a tutti, ciao
header.h dove ho messo la dichiarazione delle classi
header.cpp dove ho incluso header.h ed ho definito le funzioni di classe
main.cpp dove ho incluso header.h ed ho definito la funzione main.
A questo punto sorge il problema: dovrebbe essere corretto in questo modo, invece l'unico modo per compilare è invece che includere header.h metterci header.cpp, allora funziona.
l'errore che mi da è come se non trovasse la definizione delle funzioni di classe in header.cpp
se includi solo header.h, includi solo la classe, non le definizioni delle funzioni... se vuoi includere solo header.h credo tu debba modificarlo, scrivendoci in cima #include "header.cpp"
Vecchia Spugna
12-09-2006, 14:30
non funziona, perchè in questo modo ha le definizioni prima delle dichiarazioni
trallallero
12-09-2006, 14:47
posta va che un'immagine ha piú di 1000 parole :D
Vecchia Spugna
12-09-2006, 15:00
scatola.h
#ifndef SCATOLA_H
#define SCATOLA_H
#include <clx.h>
#pragma hdrstop
//---------------------------------------------------------------------------
using namespace std;
#pragma argsused
class scatola
{
public:
char tore[20];
char uto[20];
void visita();
void contenuto();
void contenitore();
};
#endif
//---------------------------------------------------------------------------
scatola.cpp
#ifndef SCATOLA_CPP
#define SCATOLA_CPP
#include <clx.h>
#include <iostream>
#include "scatola.h"
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
void scatola::visita()
{
cout << endl << tore << "\n" << uto;
}
void scatola::contenuto()
{
cout << "contenuto: " ;
cin >> uto;
cout << endl;
}
void scatola::contenitore()
{
cout << "contenitore: " ;
cin >> tore;
cout << endl;
}
#endif
//---------------------------------------------------------------------------
scatolone.cpp
#include <clx.h>
#include <conio>
#include <iostream>
#pragma hdrstop
#include "scatola.h"
//---------------------------------------------------------------------------
#pragma argsused
using namespace std;
int main(int argc, char* argv[])
{
scatola scatolone;
scatolone.contenitore();
scatolone.contenuto();
scatolone.visita();
getch();
return 0;
}
//---------------------------------------------------------------------------
non funziona, perchè in questo modo ha le definizioni prima delle dichiarazioni
allora fai cosi
---header.h---
//dic. classe
---header.cpp---
//def. funz. classe
---header2.h---
#include "header.h"
#include "header.cpp"
---main.cpp---
#include "header2.h"
//resto
trallallero
12-09-2006, 15:41
allora fai cosi
---header.h---
//dic. classe
---header.cpp---
//def. funz. classe
---header2.h---
#include "header.h"
#include "header.cpp"
---main.cpp---
#include "header2.h"
//resto
includere un .cpp da un altro :mbe: ???
il problema suo penso sia che non ha creato un progetto quindi non compila tutto.
Vecchia Spugna
12-09-2006, 16:18
ma scusate.. quando aggiungo ad esempio stdio.h.. non dovrebbe essere la stessa identicissima cosa? quindi aggiungere solo il .h
il compilatore vede che sono collegati perchè hanno lo stesso nome?
ma scusate.. quando aggiungo ad esempio stdio.h.. non dovrebbe essere la stessa identicissima cosa? quindi aggiungere solo il .h
il compilatore vede che sono collegati perchè hanno lo stesso nome?
ahahah dove l'hai letta questa xD
Vecchia Spugna
12-09-2006, 18:08
ipotizzo visto che sono molto ignorante
quindi quando includo le librerie standard, che da qualche parte hanno anche l'intestazione e non solo l'header.. come fa il compilatore ad includerle?
Vecchia Spugna
12-09-2006, 19:06
ho trovato 3 files strutturati come i miei sicuramente funzionanti.. e il compilatore mi da lo stesso identico errore.. quindi l'errore non è di programmazione ma di compilazione. resta il dubbio su come sia invece possibile includere soglo gli header delle librerie di cui lui conosce il path
allora fai cosi
---header.h---
//dic. classe
---header.cpp---
//def. funz. classe
---header2.h---
#include "header.h"
#include "header.cpp"
---main.cpp---
#include "header2.h"
//resto
E' buona norma non includere mai i file cpp... Il compilatore include l'header nel sorgente per conoscere il prototipo di classi e funzioni che sono necessarie alla compilazione del cpp corrente...
I file cpp vengono tutti compilati in linguaggio oggetto dall'IDE...e dopo linkati... E' solo a questo punto che i vari cpp si devono incontrare...
trallallero
13-09-2006, 08:43
ho trovato 3 files strutturati come i miei sicuramente funzionanti.. e il compilatore mi da lo stesso identico errore.. quindi l'errore non è di programmazione ma di compilazione. resta il dubbio su come sia invece possibile includere soglo gli header delle librerie di cui lui conosce il path
che ne dici di postare l'errore ? ;)
Forse mi sbaglio (alla cieca é difficile) ma sono arcisicuro che il compilatore non compila uno dei 2 .cpp che hai fatto.
Se non crei un progetto dove specifichi quali files sono da compilare o comunque non glielo dici in qualche modo, il compilatore non puó inventarselo.
Facci vedere l'errore e se trovi un file di nome makefile magari ce lo incolli quí ;)
Vecchia Spugna
13-09-2006, 15:41
penso proprio che tu abbia ragione faccio 1 pò di prove e ti dico
Vecchia Spugna
13-09-2006, 15:59
cvd.
trallallero sei grande :winner:
in pratica questo schifo di ambiente di sviluppo gestisce le icone alla perfezione e non si preoccupa di spiegare bene cosa va a compilare.
c'è una cosina particolare da fare in modo che si aspetti che quel file cpp venga aggiunto al progetto, mentre al progetto stesso non devo aggiungere l'header e il cpp corrispondente all'header.
grazie a tutti ciao
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.