|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2004
Città: Roma e Palermo
Messaggi: 204
|
[c++] problema con map (stl) e classe
allora ho questa classe:
Codice:
class KnowledgeBase
{
public:
KnowledgeBase();
KnowledgeBase(const char* kbFileName);
~KnowledgeBase();
void setFileName(const char* kbFileName);
void addObjectDescription(string utterance);
void showUserDescription();
private:
//< mela, <[rossa, ruvida], [verde]> >
map <string, vector< vector<string> > > userDescription;
char* kbFilename;
void tokenize_string(string utt, vector<string>& words);
void showStringVector(vector <string> strVec);
};
Codice:
void KnowledgeBase::addObjectDescription(string utterance)
{
vector<string> words;
tokenize_string(utterance, words);
string itemIndex;
itemIndex = *(words.end()-1);
words.pop_back();
userDescription[itemIndex].push_back(words);
//showUserDescription();
}
Codice:
void KnowledgeBase::showUserDescription()
{
if (userDescription.empty())
{
cout<<"doh!"<<endl;
}
for (map <string, vector< vector<string> > > :: iterator walkerMap = userDescription.begin(); walkerMap != userDescription.end(); walkerMap++)
{
cout<<"object <"<<walkerMap->first<<"> : ( ";
for (vector< vector<string> > :: iterator walkerVec = walkerMap->second.begin(); walkerVec != walkerMap->second.end()-1; ++walkerVec )
{
showStringVector(*walkerVec);
cout<<", ";
}
showStringVector(*(walkerMap->second.end()-1));
cout<<" )"<<endl;
}
cout<<endl;
}
il problema è che se decommento la linea sopracitata e chiamo showUserDescription dalla funzione addObjectDescription, funziona perfettamente. KnowledgeBase kbase("KnowledgeBase.txt"); kbase.addObjectDescription(string().assign(t_utt)); e ad ogni chiamata di addObjectDescription viene visualizzata correttamente tutta la struttura creata. Mentre se invece la chiamo dall'esterno con: kbase.showUserDescription(); la struttura userDescription risulta vuota (e viene visualizzato "doh" ç_ç) Perchè accade ciò e userDescription risulta vuota? Quando invece dovrebbe essere piena, dato che ad ogni chiamada di addObj... la struttura ha sia gli elementi precedenti che quelli appena aggiunti? Dove sbaglio? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova a stampare "this" all'interno di showUserDescription. A meno che tu non abbia fatto qualche passaggio per valore l'indirizzo dovrebbe essere lo stesso in entrambi i casi.
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Nov 2004
Città: Roma e Palermo
Messaggi: 204
|
Quote:
if (this->userDescription.empty()) { cout<<"doh!"<<endl; } ma lo vede sempre come vuoto ed anche: this->userDescription[itemIndex].push_back(words); ma il risultato non cambia |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Prova a mettere una stampa di this
cout << (unsigned int)this; dentro a showUserDescription. Magari fai qualche passaggio per cui alla fine operi su istanze diverse. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2004
Città: Roma e Palermo
Messaggi: 204
|
niè scusate se vi ho fatto perdere tempo, ho trovato l'errore che era da un altra parte... ç_ç
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Nov 2004
Città: Roma e Palermo
Messaggi: 204
|
Quote:
la svista derivava dal fatto che il main era nello stesso file del cpp da dove veniva chiamata addObj... mi devo attaccare sul pc un post-it con scritto "non distrarti" *_* |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:09.



















