Fehler bei programmierung mit map



  • Hallo,

    ich programmiere gerade an einer Datenbank für eine Kontaktliste, diese wird jedoch nicht mit Mysqul oder dergleichen realisiert sondern mit Code. Jeweils immer mit einer klasse key und value.

    Dies sollte alles bereits funtkionieren, doch nun bin ich auf einen Fehler gestoßen den ich nicht lösen kann. Denn wenn ich über den iterator auf die Werte zugreifn möchte, um sie ausgeben zu können, ist der "first" wert konstant, der "second" jedoch nicht. Nun kann ich nicht mit den programmierten Methoden auf die first Werte zugreifen da anscheinden der first constant ist. Bei second läuft alles Einwandfrei... 😞

    Weiß irgendwer eine Lösung? Damit es mit first genauso funktioniert wie bei second? 😕

    Danke in Vorraus! 🙂



  • Zeig mal Code. An sich ist es kein Problem, dass "first" konstant ist. Du sollst die Schlüssel ja nicht nachträglich ändern. Das hindert dich aber normalerweise nicht daran, lesend auf die Werte zuzugreifen.



  • bool DB_T::T10_Search_Contact_short_name(char* m_t10_short_name)
    {
    T10_call_numbers_cnt::iterator it_t10;
    int rc = 0;

    //Search number in t10 short name
    cout << "Short Name: " << m_t10_short_name << endl;
    for( it_t10 = m_T10_call_numbers_cnt_ptr->begin(); it_t10 != m_T10_call_numbers_cnt_ptr->end(); it_t10++ )
    {
    if( strcmp(it_t10->second.Get_t10_short_name(), m_t10_short_name) == 0 )
    {
    cout << "Long Name: " << it_t10->second.Get_t10_long_name() << endl;
    cout << "Number: " << it_t10->first.Get_t10_no() << endl; <-- hier meldet er den Fehler
    it_t10->
    rc = 1;
    }
    }
    return rc;

    }

    Fehler:

    Description Resource Path Location Type
    passing 'const T10_call_numbers_key_T' as 'this' argument of 'int T10_call_numbers_key_T::Get_t10_no()' discards qualifiers [-fpermissive] DB_T.cpp /RIO/src line 309 C/C++ Problem



  • der Schlüssel wird nachträglich eh nicht geändert..

    bin übrigens der gleiche wie gt_96, hatte nur Probleme bei der Anmeldung



  • Get_t10_no ist wohl nicht const.



  • ist Get_t10_number() auch nicht und es geht bei second trotzdem



  • gt96 schrieb:

    ist Get_t10_number() auch nicht und es geht bei second trotzdem

    second ist auch nicht const. first schon.



  • JA danke, nun funktioniert es

    Kann mir jedoch irgendwer erklären warum first constant ist? Würde mich sehr interessieren, da ich es nicht aktiv auf constant gesetzt habe?



  • Die Map sortiert sich selbst beim Einfügen von Elementen. Wenn du einfach so die Schlüssel ändern könntest, würdest du die Sortierung durcheinander bringen.



  • Ja verstehe schon, besten Dank! 👍 🙂



  • Mal so nebenbei: Der Code sieht ziemlich katastrophal aus. Zum einen durch die Namen und zum anderen ist komisch, dass du ein Pointer auf einen Container hast und statt std::string auf char* (warum nicht const?) und auf strcmp zurueckgreifst.
    Nebenbei stellt sich die Frage, warum noch keine C++-11 Features verwendet werden.


Anmelden zum Antworten