P
Deine Funktion erwartet nämlich zwei Integer-Werte, Du übergibst aber einen float-Wert. Ausserdem ist es nicht ratsam, eine Funktion zu überladen, und ihr eine komplett andere Funktionalität zu verpassen: std::pow berechnet Potenzen. Und Deine Formel a*b-3 berechnet irgendwas anderes. Solche Dinge machen den Code für andere schwer lesbar, und darum ist es besser, der Funktion einen anderen, passenden Namen zu geben, der noch nicht belegt ist.
Also das hab ich nur als Beispiel gemacht, weil ich nicht die ganze Funktions-Definition hier hin schreiben wollte. Bei meiner Version berechnet die Funktion pow() natürlich Potenzen (nur halt von Integern). Das mit dem float und dem int habe ich gemacht, weil der Compiler ja sonst nicht wegen einer Zweideutigkeit meckert.
Das Problem ist nicht, dass hier ein Header drin ist, den Du nicht brauchst, sondern dass Du eine Funktion überladen willst, die schon im namespace std existiert.
Die Funktion pow ist aber nur im namespace std deklariert, wenn ich auch den Header cmath oder math.h einbinde, was ich ja mit Absicht vermieden habe.
wenn du z.b. iostream einbindest, dann muss iostream selbst logischerweise alle header einbinden, die es braucht, um alle funktionen bereitzustellen, die mit anderen teilen der Standard C++ library zu tun haben. <cmath> könnte z.b. benötigt werden, um formatierungsfunktionen für float/double etc. zu erlauben.
Stimmt. Danke darauf wäre ich nicht so schnell gekommen. Ich habe einfach mal das ganze kompiliert, ohne iostream einzubinden (natürlich dann auch ohne cout und cin) und dann klappt es auf einmal.
Vielen Dank!
Felix