Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: map ja käännösvirhe

TsaTsaTsaa [19.04.2007 19:22:46]

#

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?

TsaTsaTsaa [19.04.2007 21:19:17]

#

Rupesi pelittämään kun otin jäsenfunktion määrittelystä constin pois (tuossa yllä en sitä näköjään edes ollut laittanut).

koo [20.04.2007 00:02:38]

#

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;
}

TsaTsaTsaa [20.04.2007 10:16:00]

#

Ookoo, kiitos korjauksesta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta