allora ho questa classe:
per aggiungere oggetti a userDescription chiamo: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); };
Notare la riga commentata sopracodice: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" ç_ç) e la visualizzazione non avviene essendo vuota.
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?

Rispondi quotando