PDA

Visualizza la versione completa : [c++]stl map


giuseppe500
13-02-2009, 17:55
ciao.
vogli assegnare con l'operatore [] ad un puntatore map <string,string> un valore , il problema è che se faccio :


map<string,string>* mAllTextures
//e
mAllTextures['a']= 'test'

il compilatore mi da quest errore:
Error 2 error C2107: illegal index, indirection not allowed c:\programmazione\c++\d3dxcreatemeshfvf\mesh\colla dareadertriangles.cpp 552

ho provato a fare



map<string,string>* mAllTextures
//e
*mAllTextures['a']= 'test'


ma niente da fare.

shodan
13-02-2009, 17:59
Normale. La key deve essere del tipo dichiarato nel template. Nel tuo caso una stringa, non un carattere.

giuseppe500
13-02-2009, 18:17
grazie shodan, ho corretto cosi:



string strFilename = puriImage->getPath();
string strName = string(dImage->getName());

mAllTextures[strName] = strFilename;


ma adesso mi da quest errore:

Error 2 error C2677: binary '[' : no global operator found which takes type 'std::string' (or there is no acceptable conversion) c:\programmazione\c++\d3dxcreatemeshfvf\mesh\colla dareadertriangles.cpp 554

eppure sono ambedue stringhe.

shodan
13-02-2009, 18:23
Mi era sfuggito che fosse un puntatore.
Devi fare così se vuoi usare []

(*mAllTextures)[strName] = strFilename;

Io però farei così:


map<string,string>::iterator it = mAllTextures->find(strName);
if ( it != mAllTextures->end() ) {
mAllTextures->insert(std::make_pair(strName,strFilename));
}

Altrimenti corri il rischio di perdere una "strFilename" in caso utilizzassi due volte la stessa key.

Loading