Bonjour à tous !
Je tente actuellement de mettre en place un système de tile mapping, mais le "const" lors de la surcharge de la fonction "draw" me pose quelques problèmes, je m’explique :
J'ai créé une map qui fais correspondre chaque élément d'un tableau de pixel (une image) à un tile, et la surcharge de la fonction "draw" doit se charger d'afficher les tiles correspondants à chaque pixels, seulement, les fonctions constantes n'ont pas l'air d'aimer les maps, surtout que je suis obliger d'implémenter moi-même un objet se chargeant de classer les pixels dans la map, les objets "sf::Color" ne possédants pas leur propre opérateur "<" :
void TileMap::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
for(unsigned int x = 0; x < mPixelMap.getSize().x; x++)
for(unsigned int y = 0; y < mPixelMap.getSize().y; y++) // Je parcours le tableau de pixel
{
std::map <sf::Color, sf::Sprite, Compare>::const_iterator Iterator = mPixelToTile.find(mPixelMap.getPixel(x, y)); // J'utilise un "const_iterator" et "find", l'opérateur [] n'étant apparement pas constant-correct
target.draw(Iterator->second);
}
}
Sauf qu'une erreur provient, je pense, de l'utilisation de "Compare" (désolé, c'est un peu long) :
-------------- Build: Debug in KirbySFML ---------------
Compiling: TileMap.cpp
In file included from c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/map:60:0,
from c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/SFML/Graphics/Font.hpp:37,
from c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/../../../../include/SFML/Graphics.hpp:35,
from C:\Users\léo\Desktop\Programmation\Projets\KirbySFML\/TileMap.h:4,
from C:\Users\léo\Desktop\Programmation\Projets\KirbySFML\TileMap.cpp:1:
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::find(const _Key&) const [with _Key = sf::Color, _Val = std::pair<const sf::Color, sf::Sprite>, _KeyOfValue = std::_Select1st<std::pair<const sf::Color, sf::Sprite> >, _Compare = Compare, _Alloc = std::allocator<std::pair<const sf::Color, sf::Sprite> >, std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const sf::Color, sf::Sprite> >]':
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_map.h:712:29: instantiated from 'std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::find(const key_type&) const [with _Key = sf::Color, _Tp = sf::Sprite, _Compare = Compare, _Alloc = std::allocator<std::pair<const sf::Color, sf::Sprite> >, std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const sf::Color, sf::Sprite> >, key_type = sf::Color]'
C:\Users\léo\Desktop\Programmation\Projets\KirbySFML\TileMap.cpp:26:124: instantiated from here
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_tree.h:1535:38: error: passing 'const Compare' as 'this' argument of 'bool Compare::operator()(const sf::Color&, const sf::Color&)' discards qualifiers
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_tree.h: In member function 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::_M_lower_bound(const std::_Rb_tree_node<_Val>*, const std::_Rb_tree_node<_Val>*, const _Key&) const [with _Key = sf::Color, _Val = std::pair<const sf::Color, sf::Sprite>, _KeyOfValue = std::_Select1st<std::pair<const sf::Color, sf::Sprite> >, _Compare = Compare, _Alloc = std::allocator<std::pair<const sf::Color, sf::Sprite> >, std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const sf::Color, sf::Sprite> >, const std::_Rb_tree_node<_Val>* = const std::_Rb_tree_node<std::pair<const sf::Color, sf::Sprite> >*]':
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_tree.h:1532:68: instantiated from 'std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::find(const _Key&) const [with _Key = sf::Color, _Val = std::pair<const sf::Color, sf::Sprite>, _KeyOfValue = std::_Select1st<std::pair<const sf::Color, sf::Sprite> >, _Compare = Compare, _Alloc = std::allocator<std::pair<const sf::Color, sf::Sprite> >, std::_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const sf::Color, sf::Sprite> >]'
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_map.h:712:29: instantiated from 'std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator std::map<_Key, _Tp, _Compare, _Alloc>::find(const key_type&) const [with _Key = sf::Color, _Tp = sf::Sprite, _Compare = Compare, _Alloc = std::allocator<std::pair<const sf::Color, sf::Sprite> >, std::map<_Key, _Tp, _Compare, _Alloc>::const_iterator = std::_Rb_tree_const_iterator<std::pair<const sf::Color, sf::Sprite> >, key_type = sf::Color]'
C:\Users\léo\Desktop\Programmation\Projets\KirbySFML\TileMap.cpp:26:124: instantiated from here
c:\users\léo\desktop\programmation\librairies\mingw\bin\../lib/gcc/mingw32/4.5.2/include/c++/bits/stl_tree.h:1020:2: error: passing 'const Compare' as 'this' argument of 'bool Compare::operator()(const sf::Color&, const sf::Color&)' discards qualifiers
Process terminated with status 1 (0 minutes, 1 seconds)
2 errors, 0 warnings
Y a t-il un moyen de contourner le "const" de la fonction "draw" ?
Je ne vois pas vraiment comment faire...
(EDIT : Est-il autorisé de traduire son post et d'en faire un doublon sur le forum anglais ?)