0 votes

Problème des fonctions mathématiques en C++ (sous Linux)

J'ai un problème avec le max et le sqrt.

Si j'inclus math.h, il ne trouve pas sqrt.

J'ai donc consulté le fichier d'en-tête cmath et il inclut math.h, mais lorsque j'essaie d'ouvrir math.h, il me dit que le fichier n'est pas trouvé. Je pense donc que mon math.h est absent de Linux.

5voto

user101375 Points 1373

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

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

std::max std::sqrt

Mais pourquoi cela fonctionne-t-il sans "std: :" sous Windows OS ?

4voto

dfa Points 54490

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

NB : spécifier également l'espace de nom est une bonne pratique

3voto

Arnaud Gouder Points 423

Il est possible que la raison pour laquelle vous n'avez pas eu besoin d'utiliser std: : précédemment, est que quelque part dans un fichier d'en-tête la déclaration suivante a été écrite :

using namespace std;

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

J'espère que cela a clarifié les choses...

1voto

David Thornley Points 39051

Votre système a probablement les en-têtes C à un endroit du système de fichiers, et les en-têtes C++ à un autre. Connaissez-vous la liste actuelle des répertoires recherchés pour les en-têtes système ? (En fait, l'implémentation n'est pas obligée d'avoir des fichiers d'en-tête système, bien que toutes celles que je connais en aient. La norme C++ a des exigences sur ce que l'instruction #include <cmath> doit faire, mais pas sur la manière dont il doit être fait).

Dans votre réponse, vous parlez de variations entre C++ sous Linux et Windows. Celles-ci ne sont pas spécifiques au système d'exploitation, mais plutôt à l'implémentation. Vous utilisez probablement Visual C++ sous Windows et autre chose sous Linux (ne serait-ce que parce que VC++ ne fonctionne que sous 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X