2009-06-04 7 views
0

Je vais avoir problème concernant max et sqrtproblème C++ des fonctions mathématiques (sous Linux)

Si je math.h il coudn't inclus trouver sqrt. Donc, je vois le fichier d'en-tête cmath et à l'intérieur il inclut math.h, mais quand j'essaie d'ouvrir math.h, il est dit que le fichier n'est pas trouvé. Alors, il me manque mon math.h dans Linux.

+0

Dans linux, vous trouverez presque toujours à /usr/include/math.h. Êtes-vous sûr que ce n'est pas là? Il est installé dans le cadre des paquets glibc ou glibc-headers dans de nombreuses distributions. – jmanning2k

Répondre

5

Désolé, j'ai trouvé la réponse.

J'ai juste besoin d'écrire cette façon:

std :: max std :: sqrt

Mais pourquoi ça marche sans "std ::" sous Windows OS?

+2

Cela dépend de votre compilateur. Certains ne placent pas correctement les fonctions de la bibliothèque standard C dans l'espace de noms std. –

+3

Je pense que les fichiers d'en-tête windows.h définissent min et max comme des macros. Ils peuvent être désactivés en définissant NOMINMAX avant d'inclure ledit fichier. –

4

NB: en C++, vous devez #inclure < cmath> non #include < math.h>

NB: spécifiant également l'espace de noms est une bonne pratique

+0

Je pense qu'il est préférable de dire pourquoi Sombody doit faire sth, que juste le commander – user3085931

1

Votre système a probablement les en-têtes C à un endroit dans le système de fichiers, et les en-têtes C++ dans un autre. Êtes-vous familier avec la liste actuelle des répertoires recherchés pour les en-têtes système? (En fait, l'implémentation n'est pas nécessaire pour avoir des fichiers d'en-tête système, bien que tous ceux que je connais le font.La norme C++ a des exigences sur ce que l'instruction #include <cmath> doit faire, mais pas comment elle doit être faite.)

Dans votre réponse, vous parlez de variations entre C++ sous Linux et Windows. Ce ne sont pas spécifiques au système d'exploitation, mais plutôt spécifiques à la mise en œuvre. Vous utilisez probablement Visual C++ sur Windows et quelque chose d'autre sur Linux (si seulement parce que VC++ fonctionne uniquement sur Windows). Ils peuvent fonctionner différemment dans les configurations par défaut.

En fait, #include <math.h> devrait être comme #include <cmath>, sauf que math.h devrait déplacer tous ses noms de fonctions et autres dans l'espace de noms std ::. Si cela ne se produit pas dans votre système Linux C++, il y a un problème. Malheureusement, vous n'avez pas fourni assez d'informations pour comprendre ce qui se passe.

3

Il est possible que la raison pour laquelle vous ne l'avez pas besoin d'utiliser std :: précédemment, parce que quelque part dans une headerfile la déclaration suivante a été écrit:

using namespace std; 

Après cette déclaration, le « std :: » préfixe n'est plus nécessaire.

Hope this a clarifié les choses ...