std::map als Referenz übergeben ?



  • Hi

    Ich stehe gerade irgendwie aufm Schlauch:

    Definition: (Header)

    class myClass
    {
      map<int, int> m_map;
    
      void foo();
      void bar(const map<int, int> &m);
    }
    

    Implementierung: (cpp)

    myClass::foo()
    {
      ...
      bar(m_map);
      ...
    }
    
    myClass::bar(const map<int, int> &m)
    {
      ...
      map<int, int>::iterator it;
      for (it = m.begin(); it != m.end(); it++)
      {
        ...
      }
      ..
    }
    

    Mein Problem:
    Die Map ist ziemlich groß. Ich möchte sie also nicht direkt übergeben.
    Deswegen die Konsturktion mit "const Referenz". So macht man das ja bei Integern etc auch (zumindest ich).

    Aber irgendwie will das nicht. Mein GCC meckert mir die Zuweisung in der for-Schleife an. "No matching for "operator=" ..."

    Was kann ich hier tun ? Sowas muss doch auch irgendwie gehen ?
    Ich stehe scheinbar aufm Schlauch 😞

    Ich danke für Vorschläge !

    Viele Grüße,
    Benjamin

    edit:
    Fehler korrigiert. Danke, camper


  • Mod

    Benja_m schrieb:

    const & map<int, int> m
    

    das ist allerdings ein syntaxfehler. richtig ist:

    const map<int, int>& m
    


  • sorry für den fehler.
    in meinem programm ist das schon so korrekt, wie du mich verbessert hast.

    mein problem besteht aber weiterhin, da der compiler die for-schleifen-initialisierung anmeckert.



  • Benja_m schrieb:

    mein problem besteht aber weiterhin, da der compiler die for-schleifen-initialisierung anmeckert.

    Nimm const_iterator statt iterator als Datentyp.
    Die normalen Iteratoren gestatten, das Objekt, auf das man verweist, zu verändern, demzufolge können die im Zusammenhang mit const-Containern nicht angewendet werden.



  • Hallo Benja_m,

    Da die map als const übergeben wurde, darfst Du Sie nicht verändern, also bekommst Du auch keinen Iterator, der eine Veränderung zulässt.
    Du musst

    map<int, int>::const_iterator it;
    

    nutzen.

    DJohn



  • Ich sach doch:
    Brett vorm Kopp 😉

    Herzlichen Dank !


Anmelden zum Antworten