Ciao.
sono ancora su questa applicazione purtroppo ,

codice:
if(StackIfcParentIds.size() && StackIfc.size() && m_mapRegistredId.find(ref) == m_mapRegistredId.end())
{
	CBaseIfc* pBase = StackIfc.top();
	if(cc.size())
		StackIfcParentIds.top()->SetData(&pBase, m_nPos);//inserisco &pBase in una mappa (vedi dopo)
	       	m_mapRegistredRef[ref] = &pBase;//e salvo l'indirizzo in modo da poterlo assegnare dopo
	}
}
StackIfcParentIds e StackIfc sono due container stl di tipo stack.
m_mapRegistredRef[ref] è una mappa di tipo:
map<wstring, CBaseIfc**>m_mapRegistredRef;
il set data è cosi' implementato:

codice:
classe element:
void CRelContainedInSpatialStructure::SetData( CBaseIfc** ppData, int pos)
{
	CBaseIfc* pData = *ppData;
	if(pData->getType().compare(L"IfcWallStandardCase")==0)
		m_pCIfcWallsStandardCases[m_pCIfcWallsStandardCases.size()]= (CWallStandardCaseIfc**) ppData;

}
utilizzo i puntatori a puntatori perchè voglio effettuare la seguente cosa:
codice:
*m_mapRegistredRef[id] = pOldIfc;
pOldIfc = NULL;
CWallStandardCaseIfc** pw = m_GraphicsElements->getWalls(0);
m_wall = pw;
qui *m_mapRegistredRef[id] = pOldIfc; cambio il secondo indirizzo di un elemento puntatore di puntatore in modo da mantenere l'indirizzo che punta all' indirizzo cambiato nella mappa come sopra , e farlo pero' puntare(il secondo puntatore) al nuovo indirizzo.
lo faccio perchè altrimenti ci sarebbe una sostituzione e perderei il puntatore che voglio cambiare , invece cosi' il primo puntatore è nella mappa e punta al secondo puntatore.
infatti faccio: *m_mapRegistredRef[id] = pOldIfc;
in modo da far puntare l'indirizzo della mappa m_mapRegistredRef a pOldIfc che è un oggetto coi dati ,mentre prima ho messo solo l'indirizzo senza dati nel setdata in quanto i dati nell' xml arrivano dopo mentre le definizioni prima.
In pratica quando arrivano le definizioni (cn gli elementi ref) li devo registare da subito nela mappa per poi poter assegnare i dati scambiando semplicemente il secondo indirizzo (**ppdata)con quello dei dati mentre il primo continua ad essere nell oggetto mappa che contiene tutti gli elementi del tipo.
In questa maniera quando faccio ,dopo aver inserito l'indirizzo di indirizzo nella mappa e registrato nell' altra mappa m_mapRegistredref:
*m_mapRegistredRef[id] = pOldIfc;
e nela mappa m_pCIfcWallsStandardCases mi ritrovo effettivamente un oggetto riempito , quello che gli passo o meglio quello a cui faccio puntare.

Fino a qui tutto ok ,il problema è che se da dentro la classe dove faccio il parsing e tuttele cose che ho spiegato sechiamo il getWalls cosi:
[code]
CWallStandardCaseIfc* CRelContainedInSpatialStructure::getWalls(int pos)
{
CWallStandardCaseIfc* ifc = *m_pCIfcWallsStandardCases[pos];
return ifc;

};
[code]
tutto funziona.
utilizzo per portare il modello ad oggetti riempito "fuori" dalla classe del parsing xml una variabile membro pubblica come proprietà,
m_GraphicsElements = new CRelContainedInSpatialStructure();
questa classe CRelContainedInSpatialStructure porta poi con setutto il modello ad oggetti
perchè è la Root del modello , solo che i dati della root escono riempiti , gli altri ad es CWallStandardCaseIfc estratto dall array non "escono" , vengono persi.
Avete un idea di cosa possa essere?

Ora per me è molto difficile spiegarmi , e per voi di conseguenza capire , e gentilmente aiutarmi , quindi magari prima di chiudere il post squotendo la testa chiedetemi quello che non avete capito.
quello che vorrei aggiungere è che si perdono i dati e la classe viene ritornata instanziata a puntatori a schifo(ad es 0xccccccccc) .
Grazie.