[SFML 2.6.2] std::map i sf::Vector2i - binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion)
Ostatnio zmodyfikowano 2025-07-10 18:50
tBane Temat założony przez niniejszego użytkownika |
[SFML 2.6.2] std::map i sf::Vector2i - binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion) » 2025-07-10 16:03:43 Cześć. Zadeklarowałem std::map z sf::Vector2i oraz std::wstring i wyrzuca mi następujący błąd. Jak to naprawić ? binary '<': no operator found which takes a left-hand operand of type 'const _Ty' (or there is no acceptable conversion) std::map < sf::Vector2i, std::wstring > map_terrain_sets; map_terrain_sets.clear(); map_terrain_sets[ sf::Vector2i( 0, 1 ) ] = L"tiles\\set_0_water_sands"; map_terrain_sets[ sf::Vector2i( 1, 0 ) ] = L"tiles\\set_0_sands_water"; map_terrain_sets[ sf::Vector2i( 2, 1 ) ] = L"tiles\\set_1_sands_grass"; map_terrain_sets[ sf::Vector2i( 1, 2 ) ] = L"tiles\\set_1_grass_sands";
|
|
pekfos |
» 2025-07-10 17:58:11 SFML nie definiuje żadnej kolejności w jakiej punkty się naturalnie sortuje, więc nie możesz ich użyć jako klucza w kontenerze który wymaga porządku elementów. Możesz do dodefiniować samemu, na przykład template < class T > bool operator <( const sf::Vector2 < T > & lhs, const sf::Vector2 < T > & rhs ) { return lhs.x != rhs.x ? lhs.x < rhs.x: lhs.y < rhs.y; } czy cokolwiek dla Ciebie znaczy że punkt jest mniejszy od drugiego. Wymagania są te same co do sortowania, kiedyś to opisywałem tu Wprowadzenie do standardowych algorytmów. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-07-10 18:05:06 A jak użyć tej funkcji ? Samo wklejenie przed std::map nic nie dało. Błąd nadal się pojawia. template < class Vector2i > bool operator <( const sf::Vector2i & lhs, const sf::Vector2i & rhs ) { return lhs.x != rhs.x ? lhs.x < rhs.x: lhs.y < rhs.y; }
std::map < sf::Vector2i, std::wstring > map_terrain_sets;
void createTerrainPrefabs() { map_terrain_sets.clear(); map_terrain_sets[ sf::Vector2i( 0, 1 ) ] = L"tiles\\set_0_water_sands"; |
|
pekfos |
» 2025-07-10 18:37:24 Wystarczy żeby była widoczna, pewnie trzeba dać w tej samej przestrzeni nazw namespace sf { bool operator <( const Vector2i & lhs, const Vector2i & rhs ) { return lhs.x != rhs.x ? lhs.x < rhs.x: lhs.y < rhs.y; } } |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-07-10 18:50:21 Dzięki mistrzu :-) |
|
« 1 » |