Lews Therin Telamon
14-12-2009, 20:43
Ciao a tutti ragazzi, ho da poco cominciato all'Università un corso di Programmazione ad Oggetti; stiamo sviluppando un programmino che sfrutti l'ereditarietà e il polimorfismo delle classi, e volevo chiedervi un consiglio.
Ho definito una classe generica "figura" che comprende come sottoclassi "cerchi" e "rettangoli".
Nel main viene creato un vector di puntatori a questi oggetti "figura" (il nome del vector è f), che deve essere riempito specificando il tipo di figura (quindi rettangolo o cerchio) e le dimensioni di ogni figura, e alla fine il programa calcola l'area. Questi valori devono essere letti da un file.
All'inizio c'è un ciclo while che richiama un oggetto che si chiama TestFactory, il quale ritorna un puntatore ad un oggetto figura da inserire nel vector f.
Il primo problema è che l'oggetto TestFactory ha questo header file
class TestFactory
{
public:
/*costruttore*/
TestFactory(){};
/*questa funzione servirà a riempire il vector*/
figura* create();
private:
/*quando la factory viene creata, le attacco il file da cui leggere i valori*/
ifstream filein_("input.txt");
};
ma il compilatore (Dev-cpp) mi dice che "ifstream" non è un oggetto valido, anche se ovviamente ho incluso <fstream> all'inizio. :muro:
Ora, diciamo che sono riuscito ad "attaccare" all'oggetto TestFactory il file input.txt, nel file TestFactory.cpp avevo pensato di usare questo codice
char c;
filein_>>c;
if (c=="c")
{
double raggio;
filein_>>raggio;
return(new cerchio(raggio));
}
else if (c=="r")
{
double a, b;
filein_>>a;
filein_>>b;
return(new rect(a,b));
}
else if(c=="0")
{
return 0;
}
else
{
cout<<"Scelta non prevista!";
return 0;
}
io pensavo che in questo modo, ogni volta che l'oggetto TestFactory viene chiamato, il programma avrebbe associato il primo carattere che trovava alla variabile char c; se ad esempio questo char è una "c" la figura è un cerchio, quindi viene associato il primo double che trova nel file alla variabile "raggio" e lui mi restituisce un puntatore ad un cerchio che ha il raggio letto dal file.
A questo punto mi dà questo errore
"ISO C++ forbids comparison between pointer and integer"
ma non capisco dove sia il confronto tra intero e puntatore di cui parla.
In definitiva, per prima cosa mi scuso per la lunghezza del post, ma volevo cercare di esporre bene il problema (spero di esserci riuscito:D )...se qualcuno mi potesse dare un consiglio, sempre che si capisca qualcosa da quello che ho scritto (capisco che fornire frammenti di codice un po' alla rinfusa non faccia capire molto bene la situazione) mi farà un ENORME favore!
Grazie e ciao a tutti!
Ho definito una classe generica "figura" che comprende come sottoclassi "cerchi" e "rettangoli".
Nel main viene creato un vector di puntatori a questi oggetti "figura" (il nome del vector è f), che deve essere riempito specificando il tipo di figura (quindi rettangolo o cerchio) e le dimensioni di ogni figura, e alla fine il programa calcola l'area. Questi valori devono essere letti da un file.
All'inizio c'è un ciclo while che richiama un oggetto che si chiama TestFactory, il quale ritorna un puntatore ad un oggetto figura da inserire nel vector f.
Il primo problema è che l'oggetto TestFactory ha questo header file
class TestFactory
{
public:
/*costruttore*/
TestFactory(){};
/*questa funzione servirà a riempire il vector*/
figura* create();
private:
/*quando la factory viene creata, le attacco il file da cui leggere i valori*/
ifstream filein_("input.txt");
};
ma il compilatore (Dev-cpp) mi dice che "ifstream" non è un oggetto valido, anche se ovviamente ho incluso <fstream> all'inizio. :muro:
Ora, diciamo che sono riuscito ad "attaccare" all'oggetto TestFactory il file input.txt, nel file TestFactory.cpp avevo pensato di usare questo codice
char c;
filein_>>c;
if (c=="c")
{
double raggio;
filein_>>raggio;
return(new cerchio(raggio));
}
else if (c=="r")
{
double a, b;
filein_>>a;
filein_>>b;
return(new rect(a,b));
}
else if(c=="0")
{
return 0;
}
else
{
cout<<"Scelta non prevista!";
return 0;
}
io pensavo che in questo modo, ogni volta che l'oggetto TestFactory viene chiamato, il programma avrebbe associato il primo carattere che trovava alla variabile char c; se ad esempio questo char è una "c" la figura è un cerchio, quindi viene associato il primo double che trova nel file alla variabile "raggio" e lui mi restituisce un puntatore ad un cerchio che ha il raggio letto dal file.
A questo punto mi dà questo errore
"ISO C++ forbids comparison between pointer and integer"
ma non capisco dove sia il confronto tra intero e puntatore di cui parla.
In definitiva, per prima cosa mi scuso per la lunghezza del post, ma volevo cercare di esporre bene il problema (spero di esserci riuscito:D )...se qualcuno mi potesse dare un consiglio, sempre che si capisca qualcosa da quello che ho scritto (capisco che fornire frammenti di codice un po' alla rinfusa non faccia capire molto bene la situazione) mi farà un ENORME favore!
Grazie e ciao a tutti!