OVH Cloud OVH Cloud

C++ header absent sous Mandrake 9.1

5 réponses
Avatar
thierry
Bonjour,
Je suis en train d'écrire un programme en C++ et je voudrais pouvoir
invoquer des commandes bash (ls, cp mv etc ...) à partir de l'intérieur
du code.
Pour ceci j'ai besoin du fichier cstdlib.h, mais lors de la compilation avec
c++ -Wno-deprecated prog.cpp
(le "-Wno-deprecated" est utilisé car la compilation me donne un warning sur
le #include <iostream.h>, est-ce que quelqu'un pourrait me dire pourquoi,
et ce que je devrais utiliser à la place ? merci :) )

revenons à nos moutons : lors de la compilation je reçoit le msg :
cstdlib.h: not such file or directory

ce header n'existe pas sous linux.? ou un autre fichier le remplace-t-il ?

Merci pour toute réponse, faite moi savoir si vous avez besoin d'autres
renseignements.

A.T.

5 réponses

Avatar
Fabien SK
thierry wrote:

Pour ceci j'ai besoin du fichier cstdlib.h, mais lors de la compilation avec
c++ -Wno-deprecated prog.cpp
C'est sûr, soit c'est <cstdlib> (version c++), soit c'est <stdlib.h>

(version C), mais pas un mix des deux.

(le "-Wno-deprecated" est utilisé car la compilation me donne un warning sur
le #include <iostream.h>, est-ce que quelqu'un pourrait me dire pourquoi,
et ce que je devrais utiliser à la place ? merci :) )
#include <iostream>.


Avatar
thierry
Fabien SK wrote:

thierry wrote:

Pour ceci j'ai besoin du fichier cstdlib.h, mais lors de la compilation
avec c++ -Wno-deprecated prog.cpp
C'est sûr, soit c'est <cstdlib> (version c++), soit c'est <stdlib.h>

(version C), mais pas un mix des deux.


merci, ca marche, mais :

ayant les includes :

<iostream> : entrée sortie cin cout
<fstream> : ouverture et fermeture de fichiers
<cstdlib> : commandes ls etc ...

j'utilise :

ifstream ifl pour ouvrir un fichier en lecture
ofstream ofl(filename) pour ouvrir le fichier char *filename="nom.dat" en
ecriture

cout pour sortie ecran
cin pour saisie

le résultat est : ifstream , ofstream, cout, cin et ofl sont tous
undeclared.

j'utilise un bouquin qui est censé expliquer tout ca, mais c pas tres clair
(la syntaxe des includes qu'il donne est fausse déjà)
bien que je suppose que cela ne doit pas etre bien compliqué, en tout cas
merci d'avance pour toute aide.


Avatar
Fabien SK
thierry wrote:

merci, ca marche, mais :

ayant les includes :

<iostream> : entrée sortie cin cout
<fstream> : ouverture et fermeture de fichiers
<cstdlib> : commandes ls etc ...

j'utilise un bouquin qui est censé expliquer tout ca, mais c pas tres clair
(la syntaxe des includes qu'il donne est fausse déjà)
bien que je suppose que cela ne doit pas etre bien compliqué, en tout cas
merci d'avance pour toute aide.


Change de bouquin. Dans le C++ "récent", la bibliothèque standard est
rangée dans le namespace "std". Si tu ne sais pas ce que c'est qu'un
namespace, c'est vraiment que ton bouquin est à la rue.

Avatar
Fonzy
"thierry" a écrit dans le message de
news:blrrr2$5hd$
Fabien SK wrote:

thierry wrote:

Pour ceci j'ai besoin du fichier cstdlib.h, mais lors de la compilation
avec c++ -Wno-deprecated prog.cpp
C'est sûr, soit c'est <cstdlib> (version c++), soit c'est <stdlib.h>

(version C), mais pas un mix des deux.


merci, ca marche, mais :

ayant les includes :

<iostream> : entrée sortie cin cout
<fstream> : ouverture et fermeture de fichiers
<cstdlib> : commandes ls etc ...

j'utilise :

ifstream ifl pour ouvrir un fichier en lecture
ofstream ofl(filename) pour ouvrir le fichier char *filename="nom.dat" en
ecriture

cout pour sortie ecran
cin pour saisie

le résultat est : ifstream , ofstream, cout, cin et ofl sont tous
undeclared.



parce que dans le nouveau fichier d'en-tête (enfin quand je dis nouveau...)
iostream tout est dans le namespace std.
Donc:
1°) soit tu te retapes tout ton code en rajoutant des std:: devant les cout,
cin, cerr, fstream, etc...
2°) soit tu rajoutes au début de ton code : using namespace std;
(et tu pries pour qu'il n'y ait pas de collision de variables)

Fonzy



Avatar
Loïc Joly
Fonzy wrote:

2°) soit tu rajoutes au début de ton code : using namespace std;
(et tu pries pour qu'il n'y ait pas de collision de variables)


Si son code marchait avec les bibliothèque qui ne mettait rien dans des
namespaces, il ne devrait pas y avoir de problème s'il indique un
namespace par défaut.
Je conseillerais quand même d'éviter les using dans les headers, mais
pour l'implémentation, surtout pour du portage, ça semble une bonne
solution.
--
Loïc