Ongelma:
Minulla on luokka, jossa on map, jossa avaimena string ja varsinaisena datana osoitin toisen luokan instanssiin. Eli näin (nimet muutettu):
class Luokka1 { public: // ...Tässä kaikkia... // ...kivoja jäsenfunktioita... private: std::map< std::string, Luokka2* > mappi_; // ...muuta sälää... };
Sitten eräässä jäsenfunktiossa teen näin:
Luokka2* jFunktio( std::string sana ) { // Löytyykö hakusanalla if ( mappi_.find( sana ) != mappi_.end() ) { // Palautetaan löytyneen osoitin return mappi_[ sana ]; } // Jos ei löydy, palautetaan nollaosoitin return 0; }
Tätä kun yritän kääntää, tulee errori:
error: no match for 'operator[]' in '((const Luokka1*)this)->Luokka1::mappi_[sana]'
Miksi ei käänny?
Rupesi pelittämään kun otin jäsenfunktion määrittelystä constin pois (tuossa yllä en sitä näköjään edes ollut laittanut).
Väärin korjattu. :-) Tuon jäsenfunktionhan ei oikeasti ole tarkoitus muuttaa olion sisältöä, eli se const
voisi olla ihan paikallaan. Silloin ei vain kuulu käyttää taulukkoviittauksen operaattoria, koska se ei ole const
.
Luokka2 *Luokka1::jFunktio(std::string const &sana) const { std::map<std::string, Luokka2*>::const_iterator p = mappi_.find(sana); if (p != mappi_.end()) return p->second; return 0; }
Ookoo, kiitos korjauksesta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.