Newsgroup: it.comp.lang.c++
Titolo: problemi da newbie..

ciao a tutti e scusate per l'invasione ma non sapevo proprio a chi
rivolgermi..... il problema è che sto crivendo un programmino in c++
col dev 4.0 .. mi serve saperlo fare per riuscire a fare l'esame la
prox.settimana.
Mi chiedevo se qualcuno poteva darmi una mano a vedere N° 2 funzioni
che non ne vogliono sapere di funzionare.
Il resto del prog. l'ho implementato e funzia bene..ma queste due
funzioni mi fanno sempre crashare tutto... boh...cmq. chiunque volesse
aiutarmi puo' contattarmi o sul ng o via mail
(dr_man...@NOSPAMlibero.it) .. non ho postato i codici perchè
troppi file e troppe linee di codice. GRazie!! :)
ciao
Dr_Manhattan

 troppi file e troppe linee di codice. GRazie!! :)
Posta solo le due funzioni, o meglio ancora la sezione di codice che
manda in crash il programma :-))
--
Gerolamo


wrote:
Allora: il compito d'esame voleva che creassi una classe "mappa"
(semplificata) in cui la struttura dati è costituita da un array
statico di coppie chiave-valore. Le coppie sono a loro volta la
struttura dati di una classe "entry" e dovevo implementare le funzioni
di creazione, ricerca e eliminazione di entry (a proposito il tipo
delle entry è string).Tutto bene quindi: mi creo 5 file : un main, un
mappa.cpp, un mappa .h , un entry.h e un entry.cpp.
Le classi create funzionanao bene : 
ecco il find
bool mappa::find(string k)
{
int i;
entry  e;
bool trovato=true;
while((!trovato) && (i<=nelem))
             { trovato=(k==en[i].getkey(k) ) ;
              i++;
           }
return trovato;
}
il problema con questa è che se non trova la stringa va in crash.(nel
main ho inserito che se il predicato (m1.find(stringa) è vero stampa
una cosa altrimenti un'altra.
Per l'eliminazione l'ho implementato in questo modo:prima di tutto
cerca  di trovare la coppia chiave- valore e poi nel caso setta a 0
ilvalore delle corrispondenti chiavi e valori (così voleva il compito)
bool mappa::cancella(string k)
{
int i;
bool trovato=true;
while((!trovato) && (i<=nelem))
             { trovato=(k==en[i].getkey(k) ) ;
              i++;
           }
if (trovato) {
             en[i].setkey(0);
             en[i].setvalue(0);
             }
}
ora:il problema è che postando solo le funzioni non so se sono stato
chiaro.E' la prima volta che chiedo una mano e quindi non so nenanche
come gestire la cosa... :) vabbe'..grazie
ciao
[d0z3n]


 bool mappa::cancella(string k)
Stesso problema di prima
Facci sapere se hai risolto.
Ciao
--
Gerolamo

Ciao
oki ..thx per la dritta (madonna come stavo arrabbiato quando ho visto
l'errore fatto !! :) )ma non funzia ancora... strano..č come se il
find trvasse sempre la stringa anche se io non ce l'ho inserita.
Ho avuto conferma di questa cosa quando osno andato a modificare il
predicato della funzione ricerca :
prima era :
if(m1.find(s)) cout << "stringa   presente ";
else cout << "stringa non  presente " << endl;
ora č :
if(!m1.find(s)) cout << "stringa  non presente ";
else cout << "stringa  presente " << endl;
ma mi dice sempre stringa presente.
Il cancella addirittura crasha.. boh...
cmq se ti servoo altre info posso postare i 5 file nel totale..
ciao e grazie ancora!!
[d0z3n++]

 ciao e grazie ancora!!
più che altro posteresti l'implementazione della classe
'entry' con i costruttori e il metodo 'getkey' ?
Le 'string' che usi sono 'std::string', vero?
--
Gerolamo

Le 'string' che usi sono 'std::string', vero?
si std
segue entry.h
#ifndef ENTRY_H
#define ENTRY_H
#include <string>
class entry
{
public:
friend ostream &operator<<(ostream &, const entry &);
entry(const string  = "",const string = "");
entry(const entry&);
void setkey(string);
void setvalue(string);
string getvalue(string value){return value;}
string getkey(string key){return key;}
bool getflag (bool valido){if(valido) return true;else false;}
bool  setflag(bool  valido){valido = true; return true;}
bool  operator==(const entry &);
entry & operator=(const entry &);
private:
bool valido;
string key;
string value;
};
#endif
segue entry.cpp
#include "entry.h"
entry::entry(const string k = "",const string v= "")
{
setkey(k);
setvalue(v);
}
entry::entry(const entry& en1)
{
setkey(en1.key);
setvalue(en1.value);
}
ostream &operator<<(ostream &out, const entry &e)
{
 out << "Key : " << e.key << " -- Value : " << e.value << endl;
 
 return out;
}
void entry :: setkey(string k)
{
key=k;
}
void entry :: setvalue(string v)
{
value=v;
}
bool  entry :: operator==(const entry & ent)
{
if((key==ent.key) && (value==ent.value))return true ;
else return false;
}
entry & entry ::  operator=(const entry & ent)
{
 key = ent.key;
 value = ent.value;
 return *this;
}

 bool  setflag(bool  valido){valido = true; return true;}
 string getvalue(){return value;}
 string getkey(){return key;}
 bool getflag (){if(valido) return true;else false;}
 bool  setflag(bool  v){valido = v; return v;}
altrimenti il valore che passi alla funzione nasconde (avendo
lo stesso nome) il corrispondente attributo della classe.
--
Gerolamo


wrote:


boh..sto tutto inceppato..
Perche' inizializzi trovato a true ? Il problema e' presente
sia in find che in cancella.
Andrea