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.