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);
};
per aggiungere oggetti a userDescription chiamo:
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();
}
Notare la riga commentata sopra


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?