IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

[Flux] passer un ifstream en paramètre d'une fonction


Sujet :

C++

  1. #1
    Membre confirmé Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Par défaut [Flux] passer un ifstream en paramètre d'une fonction
    Bonjour, j'ai un petit pb pour passer un flux en paramètre d'une fonction...
    Voila comment je m'y prends:

    le cpp:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <fstream>
    .........
    
    //obtention de la taille du fichier
    std::ifstream fichier(l_pDoc->m_csFileName);
    fichier.seekg( 0 , std::ios_base::end );
    int sizeFile = fichier.tellg();
    	
    if(sizeFile <= MAX_SIZE_FILE)
    {
       .....
    
    }else{
    
       MessageBox("Le fichier à décoder est trop volumienux", "Failed", MB_OK | MB_ICONSTOP);
       int idDlg = MessageBox("Voulez vous diviser le fichier?", "Test", MB_YESNO|MB_ICONEXCLAMATION);
       if(idDlg == 6)
       {
    	MainDecode::fileSplit(fichier);
       }
    }

    la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int MainDecode::fileSplit(ifstream& fichier)
    {
    ....
    }
    le h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int MainDecode::fileSplit(ifstream& fichier)
    Ce code me génére des erreurs....
    maindecode.h(39) : error C2061: syntax error : identifier 'ifstream'
    c'est comme s'il ne tenait pas compte des inclusions
    #include <fstream>

    C'est surement pas grand chose, mais je suis débutant en C/C++, merci davance pour votre aide

  2. #2
    Membre confirmé Avatar de Furr
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 153
    Par défaut
    Salut

    Dans ton .h, je suppose que tu n'as pas mis "using namespace std" (et d'ailleurs il ne faut pas ), c'est pourquoi tu obtiens cette erreur

    Il faut que dans ta liste de paramètres tu ajoutes un std:: devant ton ifstream&

    Ce qui te donnera pour ton .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int fileSplit(std::ifstream& fichier);
    De plus, si ta méthode filesplit appartient à ta classe MainDecode, il est inutile d'ajouter le MainDecode:: devant sa déclaration

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    Salut,

    La réponse est, finalement, toute simple...: le nom réel de ifstream est... std::ifstream parce que c'est une classe qui se trouve dans l'espace de nom std.

    Dés lors, tu as deux solutions:
    1. Soit tu utilise le nom long, à savoir std::ifstream, comme tu l'a fait lors de la déclaration de ta variable ficher
    2. Soit tu rajoute une directive using namespace std; dans le fichier *.cpp dans lequel tu implémente la fonction fileSplit de la classe MainDecode
    Il faut savoir que l'utilisation des directives using namespace ont la fâcheuse manie, lorsqu'elles sont placées dans un fichier d'en-tête (*.h/*.hpp) dans tout fichier qui inclurait, même de manière indirect, ce fichier d'en-tête.

    Même si l'on n'inclut, normalement, jamais un fichier d'implémentation (*.cpp), cette seule manie me fait généralement le recours à la première solution proposée, quel que soit l'endroit où je dois avoir recours à quelque chose se trouvant dans l'espace de noms std
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre confirmé Avatar de yoshï
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 206
    Par défaut
    Merci bcp pour vos réponses et pour ces éclaircissements

  5. #5
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Salut,

    La réponse est, finalement, toute simple...: le nom réel de ifstream est... std::ifstream parce que c'est une classe qui se trouve dans l'espace de nom std.

    Dés lors, tu as deux solutions:
    1. Soit tu utilise le nom long, à savoir std::ifstream, comme tu l'a fait lors de la déclaration de ta variable ficher
    2. Soit tu rajoute une directive using namespace std; dans le fichier *.cpp dans lequel tu implémente la fonction fileSplit de la classe MainDecode
    Tu as en principe aussi une solution tierce, intermédiaire, ajouter une directive using std::ifstream; mais à éviter aussi tout de même dans les fichiers d'en-tête...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/12/2009, 12h38
  2. [Débutant] Comment passer un fichier en paramètre d'une fonction?
    Par Rires et Chansons dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/10/2007, 21h12
  3. Passer un pointeur en paramètre d'une fonction
    Par oranoutan dans le forum C
    Réponses: 18
    Dernier message: 11/09/2007, 21h48
  4. Passer un curseur en paramètre d'une fonction?
    Par Lafoudre dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2007, 15h00
  5. Passer un buffer en paramètre d'une fonction
    Par jomeo dans le forum C++
    Réponses: 3
    Dernier message: 26/02/2007, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo