2009-06-04 2 views
0

Ich habe ein Problem in Bezug auf max und sqrtC++ Math Funktionen Problem (unter Linux)

Wenn ich Mathe.h es nicht finden sqrt.

So sehe ich die cmath-Header-Datei und darin enthält math.h, aber wenn ich versuche, math.h zu öffnen, heißt es, dass die Datei nicht gefunden wird. SO ithink mein math.h fehlt in Linux.

+0

In Linux, werden Sie fast immer es bei /usr/include/math.h finden. Bist du sicher, dass es nicht da ist? Es ist als Teil der Glibc oder Glibc-Header-Pakete auf vielen Distributionen installiert. – jmanning2k

Antwort

5

Entschuldigung, ich fand die Antwort.

ich es auf diese Weise müssen nur schreiben:

std :: max std :: sqrt

Aber warum es ohne "std ::" unter Windows-Betriebssystem funktioniert?

+2

Es hängt von Ihrem Compiler ab. Einige platzieren die Funktionen in der C-Standardbibliothek nicht korrekt in den std-Namespace. –

+3

Ich denke, die Header-Dateien windows.h definieren Min und Max als Makros. Sie können deaktiviert werden, indem NOMINMAX vor dem Einbinden der Datei definiert wird. –

4

NB: in C++ Sie < cmath # include sollte> nicht # include < math.h>

NB: auch den Namespace spezifiziert ist eine gute Praxis

+0

Ich denke, es ist besser zu sagen, warum jemand etwas tun muss, als nur es zu befehlen – user3085931

1

Ihr System hat wahrscheinlich die C-Header an einer Stelle im Dateisystem und die C++ - Header in einer anderen. Kennen Sie die tatsächliche Liste der Verzeichnisse, die nach Systemkopfzeilen durchsucht werden? (Eigentlich muss die Implementierung keine System-Header-Dateien haben, obwohl alle, mit denen ich vertraut bin, tun. Der C++ - Standard hat Anforderungen, was die Anweisung #include <cmath> zu tun hat, aber nicht, wie es gemacht werden muss.)

In Ihrer Antwort sprechen Sie über Variationen zwischen C++ unter Linux und Windows. Diese sind nicht betriebssystemspezifisch, sondern umsetzungsspezifisch. Sie verwenden wahrscheinlich Visual C++ unter Windows und etwas anderes unter Linux (nur weil VC++ nur unter Windows läuft). Sie können in Standardkonfigurationen anders funktionieren.

In der Tat sollte #include <math.h> wie #include <cmath> sein, außer dass math.h alle seine Funktionsnamen und solche in den Namespace std :: verschieben sollte. Wenn dies in Ihrem Linux C++ System nicht geschieht, liegt ein Problem vor. Leider haben Sie nicht genug Informationen zur Verfügung gestellt, um herauszufinden, was passiert.

3

Es ist möglich, dass der Grund, dass Sie nicht std zu verwenden brauchten :: zuvor, weil irgendwo in einer Headerdatei geschrieben wurde, die folgende Aussage:

using namespace std; 

Nach dieser Aussage, die ‚std ::‘ Präfix ist nicht mehr notwendig.

Hope this Dinge geklärt ...