Const-Methode & Variablenänderung



  • Hallo,
    die vierte Zeile (iter = ...) wird, wenn die Methode "const" ist, als Fehler gekennzeichnet:

    const sf::Image* ImageCache::get_image(std::string filename) const
    {
        std::map<std::string, const sf::Image*>::iterator iter;
        iter = cache.find(filename);
    }
    

    Ich will doch das Objekt bzw. die Member nicht ändern, sondern nur eine temporäre Variable. 😞
    Warum mag der Compiler das nicht?

    Fehlermeldung:

    D:\Programme\CodeBlocks\Projects\g1shoot\imagecache.cpp|14|error: no match for 'operator=' in 'iter = ((const ImageCache*)this)->ImageCache::cache.std::map<_Key, _Tp, _Compare, _Alloc>::find [with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = const sf::Image*, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, const sf::Image*> >](((const std::basic_string<char, std::char_|
    d:\programme\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_tree.h|154|note: candidates are: std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, const sf::Image*> >& std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, const sf::Image*> >::operator=(const std::_Rb_tree_iterator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, const sf::Image*> >&)|
    


  • Sorry, unsorgfältig gelesen...


  • Mod

    Weil das erstellen eines iterators keine const-Operation ist. Schließlich kann man über einen iterator ein Element ändern. Du suchst einen const_iterator.

    edit2: Durch EOutOfResources edit hat sich mein vorheriges edit als Kommentar dazu erledigt 🕶



  • Wieso machst du denn keinen const_iterator wenn du nichts verändern willst?
    Das sollte auch dein Problem lösen 😉

    Lg freeG



  • Wieso machst du denn keinen const_iterator wenn du nichts verändern willst?

    Weil ich nicht wusste, dass es sowas gibt 😉

    Danke für die Antworten 🙂


Anmelden zum Antworten