SFML / imgui-sfml

Dear ImGui backend for use with SFML
MIT License
1.13k stars 171 forks source link

abs(const float&) is ambiguous #29

Closed Howld closed 7 years ago

Howld commented 7 years ago

g++ version: g++ (i686-posix-dwarf, Built by MinGW-W64 project) 6.1.0 Copyright (C) 2016 Free Software Foundation, Inc.

Error:

H:\projects\sfml_game>make
g++ -c src/imgui-SFML.cpp -o build/obj/imgui-SFML.o -Iinclude/ -Ithird/SFML/include/ -Ithird/imgui-sfml/ -Ithird/imgui -Wall -std=c++11
src/imgui-SFML.cpp: In function 'void ImGui::Image(const sf::Texture&, const FloatRect&, const sf::Color&, const sf::Color&)':
src/imgui-SFML.cpp:221:54: error: call of overloaded 'abs(const float&)' is ambiguous
     Image(texture, sf::Vector2f(abs(textureRect.width), abs(textureRect.height)), textureRect, tintColor, borderColor);
                                                      ^
In file included from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/cstdlib:75:0,
                 from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/stl_algo.h:59,
                 from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/algorithm:62,
                 from third/SFML/include/SFML/Graphics/Rect.hpp:32,
                 from third/imgui-sfml/imgui-SFML.h:2,
                 from src/imgui-SFML.cpp:1:
F:/mingw32/i686-w64-mingw32/include/stdlib.h:329:15: note: candidate: int abs(int)
   int __cdecl abs(int _X);
               ^~~
In file included from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/stl_algo.h:59:0,
                 from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/algorithm:62,
                 from third/SFML/include/SFML/Graphics/Rect.hpp:32,
                 from third/imgui-sfml/imgui-SFML.h:2,
                 from src/imgui-SFML.cpp:1:
F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/cstdlib:180:3: note: candidate: long long int std::abs(long long int)
   abs(long long __x) { return __builtin_llabs (__x); }
   ^~~
F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/cstdlib:172:3: note: candidate: long int std::abs(long int)
   abs(long __i) { return __builtin_labs(__i); }
   ^~~
src/imgui-SFML.cpp:221:79: error: call of overloaded 'abs(const float&)' is ambiguous
     Image(texture, sf::Vector2f(abs(textureRect.width), abs(textureRect.height)), textureRect, tintColor, borderColor);
                                                                               ^
In file included from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/cstdlib:75:0,
                 from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/stl_algo.h:59,
                 from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/algorithm:62,
                 from third/SFML/include/SFML/Graphics/Rect.hpp:32,
                 from third/imgui-sfml/imgui-SFML.h:2,
                 from src/imgui-SFML.cpp:1:
F:/mingw32/i686-w64-mingw32/include/stdlib.h:329:15: note: candidate: int abs(int)
   int __cdecl abs(int _X);
               ^~~
In file included from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/bits/stl_algo.h:59:0,
                 from F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/algorithm:62,
                 from third/SFML/include/SFML/Graphics/Rect.hpp:32,
                 from third/imgui-sfml/imgui-SFML.h:2,
                 from src/imgui-SFML.cpp:1:
F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/cstdlib:180:3: note: candidate: long long int std::abs(long long int)
   abs(long long __x) { return __builtin_llabs (__x); }
   ^~~
F:/mingw32/lib/gcc/i686-w64-mingw32/6.1.0/include/c++/cstdlib:172:3: note: candidate: long int std::abs(long int)
   abs(long __i) { return __builtin_labs(__i); }
   ^~~
makefile:37: recipe for target 'imgui-SFML.o' failed
make: *** [imgui-SFML.o] Error 1

Issue: This is my code to solve it.

    const float width = textureRect.width > 0 ? textureRect.width : -textureRect.width;
    const float height = textureRect.height > 0 ? textureRect.height : -textureRect.height;
    Image(texture, sf::Vector2f(width, height), textureRect, tintColor, borderColor);
eliasdaler commented 7 years ago

Try to use std::abs instead of C abs. Does it fix the issue? If it does, I'll just make a simple commit.

Howld commented 7 years ago

I changed my project and decide not to use this library now. And I use GCC 6.1.0 MinGW (DW2) - 32-bit sfml and MinGW Builds 6.1.0 (32-bit) in win7 32bit. So sorry to say that I can't help you.

eliasdaler commented 7 years ago

Okay. Replacing abs with std::abs should certainly fix it anyway.

salianifo commented 7 years ago

It seems like this is caused by not including as the float overload of std::abs is not in . I'm using GCC 6.2 MinGW (DW2) 32-bit on Windows 7 (64-bit). Adding the include fixed my problem.

monowii commented 7 years ago

Had same problem, resolved with #include <cmath> in imgui-SFML.h

eliasdaler commented 7 years ago

@monowii, thanks! I included