PDA

Afficher la version complète : fstream.h manquant alors qu'il est là !



MacDo
03/12/2007, 18h45
Bonjour à tous,

Dans un programme C très très simple, j'ai la ligne #include <fstream.h>. Ce fichier "fstream.h" est présent dans les répertoires "/usr/include/c++/4.2.1/backward" et "/usr/include/c++/4.1.3/backward". La compilation de mon programme avec un bête "gcc fichier.c" me donne :


fichier.c:3:21: error: fstream.h: Aucun fichier ou répertoire de ce type

Est-ce que quelqu'un a une solution ??

Pour info, voici la sortie de la commande "gcc -v" :

Using built-in specs.
Target: i586-suse-linux
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --libexecdir=/usr/lib --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.2.1 --enable-ssp --disable-libssp --disable-libgcj --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --program-suffix=-4.2 --enable-version-specific-runtime-libs --without-system-libunwind --with-cpu=generic --host=i586-suse-linux
Thread model: posix
gcc version 4.2.1 (SUSE Linux)

Merci pour votre aide précieuse !

MacDo

Pumpkin
03/12/2007, 19h34
Hello !

Tu compiles en C or le header se trouve dans un dossier relatif au C++ (je ne sais pas si cela à un impact)

Et si tu remplaces ton include par :

#include <backward/fstream.h>Pas mieux ?

Ou carrément :

#include <c++/4.2.1/backward/fstream.h>

Agemen
03/12/2007, 22h24
Euh... tu compiles en C en appelant un fichier en tête pour C++. Bon, a priori, pas de problèmes, à ce niveau les syntaxes sont les mêms, mes connaissances s'arrêtent d'ailleurs là... mais je suis gêné, parceque ton fichier ciblé lors de l'édition de liens est en C++... après je sais pas, hein
NOTE : en C++, on fait <fstream>, pas <fstream.h>.
En fait, il me semble que #include <truc> va chercher truc dans certains dossiers particuliers de ton disque. Mais faut savoir comment il utilise les fichiers, après... et s'il peut les utiliser. Je sais pas si gcc nécessite le .h ...

Heero_Yuy
04/12/2007, 09h27
Salux,

Je serais d'avis de faire comme la première solution que t'as proposé Pumpkin ;)


<div class='quotetop'>Citation (Agemen)</div>
NOTE : en C++, on fait <fstream>, pas <fstream.h>.
En fait, il me semble que #include <truc> va chercher truc dans certains dossiers particuliers de ton disque. Mais faut savoir comment il utilise les fichiers, après... et s'il peut les utiliser. Je sais pas si gcc nécessite le .h ...[/b]

Pour répondre à ta question, essayes de compiler un programme en C, avec en entête uniquement un :


#include <stdio>

Et tu verras la belle erreur de compilation :D

Donc, omettre le ".h" dans le nom de la bibliothèque lors d'un "#include" n'est valable que pour le C++ et pas pour le C.

Burn2
04/12/2007, 13h40
Tu as inclue fstream.h comment???

Essaye de faire:

#incllude <fstream.h>
ou
#include "fstream.h"

Il arrive que ça ne passe pas avec les < > et qu'il faille " " et vis versa.

Agemen
04/12/2007, 14h32
@ angel : tout à fait d'accord... mais j'avais un léger doute^^

Heero_Yuy
04/12/2007, 14h54
@Agemen : En cas de doute, ne pas hésiter à demander ;)

MacDo
05/12/2007, 00h12
Oui ben merci bien :-) En fait je n'avais évidemment pas besoin d'inclure ce fichier pour gérer les fichiers en C... Et il suffisait de supprimer cette ligne pour que tout fonctionne comme je le voulais... Je suis un peu rouillé...
Merci à tous :)

Agemen
05/12/2007, 00h37
Atta... tu fais pas de redirections de flux dans ton prog, ou de choses comme ça? ^_^"
C'est pas à ça (entre autres) que sert fstream?
(c'est assez neuf pour moi^^)

Heero_Yuy
05/12/2007, 09h31
Allez, un petit man fstream (https://developers.sun.com/sunstudio/documentation/ss12/mr/man3cc4/fstream.3.html) pour vous donner un peu de lecture les amis ;)