Frage zum Fehler: "ambigious function call"
-
Hallo, schaut euch mal folgendes Programm an:
#include <cmath> int main() { int i = std::sqrt(4); i = std::abs(4); //Fehler: ambigious function call i = std::fabs(4); }Hierbei bekomme ich die Fehlermeldung, dass "abs" ein ambigious function call sei mit dem Hinweis, die möglichen Kandidaten sind "float, double, long double".
Aber wenn man zum Beispiel das hier anschaut: http://en.cppreference.com/w/cpp/numeric/math/fabs
Da gibt es eigentlich keinen Unterschied zwischen abs und fabs. Beide sind in cmath überladen für float, double, long double (genau wie sqrt). Warum schlägt dann nur der Aufruf von abs fehlt? Warum wird hier das int nicht wie bei den beiden anderen in double konvertiert?
Liegt es daran, dass abs nicht als Parameter den "integral" type hat? (Leider kenne ich mich mit dem neuen Standard noch nicht so gut aus, und weis nicht genau, was der typ ist).Schonmal danke für Antworten!
-
Types bool, char, char16_t, char32_t, wchar_t, and the signed and unsigned integer types are collectively called integral types.
Hat mit dem neuen Standard eigentlich nichts zu tun. Ich würde an deiner Stelle einfach 4.0 schreiben.
-
du kannst einfach 4f schreiben hat den gleichen Effekt wie die Lösung von Ambigious
-
Markuhn schrieb:
du kannst einfach 4f schreiben hat den gleichen Effekt wie die Lösung von Ambigious
Wenn, dann 4.f
http://ideone.com/78iNl
-
Hmm...ist in der Tat etwas merkwürdig.
Natürlich sollteabs()mit einem integer gar keine Probleme machen...
fabs()hingegen könnte den beschriebenen Fehler provozieren (ohne C++11).Ganz sicher, dass Du richtig gelesen hast? War schließlich schon spät...
