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

SL & STL C++ Discussion :

blocage sur les fichiers


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Par défaut blocage sur les fichiers
    bjr!!
    voila ce que me sors mon compilateur("dev-c++"):

    \fichiers.cpp ambiguous overload for 'operator>>' in 'std:Surprisedperator>> [with _CharT = char, _Traits = std::char_traits<char>](((std::basic_istream<char, std::char_traits<char> >&Wink((std::basic_istream<char, std::char_traits<char> >*)(((std::fstream*)(&m)) + 40u))), ((char*)((char (*)[20])(&m)))) >> " "'

    sachant qu'a la base j'ai une structure qui ressemble a sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct Mesure
    {
    char nom[MAXNOM];
    char reference[MAXREF];
    float resultat;
    fstream fs;
    };
    et qu'il bloque dans cette fonction:

    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
     
    void consulterInfo(int rang)
    {
    Mesure m;
    //ifstream fs;
    m.fs.open("mesures.txt",ios::in);
    if(m.fs.fail())
    cout << "Erreur a l'ouverture du fichier\n" << endl;
    //on se place a l'endroit voulu du fichier
    m.fs.seekg(rang * RECORD_SIZE,ios::beg);
    //on lit les infos
    m.fs >> m.nom >> " "; // il refuse ces 2 lignes
    m.fs >> m.reference >> " ";
    m.fs >> m.resultat;
     
    cout << m.nom << " " << m.reference << " " << m.resultat;
     
    m.fs.close();
    }

    du coup il refuse m.fs >> m.nom >> " "; et m.fs >> m.reference >> " "; par contre pour m.resultat sa passe quoi quelqu'un pourrais m'aider svp!! merci d'avance

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour.
    C'est parce que tu utilise des tableau de taille fixe. Il n'existe pas d'operateur pour cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char nom[MAXNOM];
    char reference[MAXREF];
    Peut tu plutôt utiliser les std::string?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct Mesure
    {
    std::string nom;
    std::string reference;
    float resultat;
    fstream fs;
    };

  3. #3
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Par défaut re
    bonjour!!

    merci pour la réponse
    par contre j'ai changé en string
    mais sa marche toujours pas j'ai encore la même erreur

  4. #4
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Et en enlevant les
    ?

  5. #5
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Par défaut re
    la sa marche merci pour la réponse
    par contre les valeurs ne sont pas bonnes celles récupérées!!

    dans ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void consulterInfo(int rang)
    je pense qu'il y a un gros soucie
    le but recherché c'est selon le rang rentré de récupéré les infos et les affichés

    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
     
    void consulterInfo(int rang)
    {
       Mesure m;
       m.fs.open("mesures.txt",ios::in);
       if(m.fs.fail())
           cout << "Erreur a l'ouverture du fichier\n" << endl;
       //on se place a l'endroit voulu du fichier
       m.fs.seekg(rang * RECORD_SIZE,ios::beg);
       //on récupère les infos
         m.fs >> m.nom;
         m.fs >> m.reference;
         m.fs >> m.resultat; 
       //affichage des valeurs
       cout << m.nom << " " << m.reference << " " << m.resultat;
     
       m.fs.close();
    }

  6. #6
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Et ceci :
    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
    void consulterInfo(int rang)
    {
    Mesure m;
    char c;
    //ifstream fs;
    m.fs.open("mesures.txt",ios::in);
    if(m.fs.fail())
    cout << "Erreur a l'ouverture du fichier\n" << endl;
    //on se place a l'endroit voulu du fichier
    m.fs.seekg(rang * RECORD_SIZE,ios::beg);
    //on lit les infos
    m.fs >> m.nom >> c; // il refuse ces 2 lignes
    m.fs >> m.reference >> c;
    m.fs >> m.resultat;
     
    cout << m.nom << " " << m.reference << " " << m.resultat;
     
    m.fs.close();
    }
    ?

  7. #7
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Par défaut
    non toujours pas
    a la base les infos sont saisies comme sa
    dans cette fonction:

    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
     
    void saisieInfo()
    {
         Mesure m;
         m.fs.open("mesures.txt",ios::out);
         if(m.fs.fail())
             cout << "Erreur a l'ouverture du fichier\n" << endl;
         cout << "Entrez le nom: ";
         cin >> m.nom;
         m.fs << m.nom << " " ;
         cout << "Entrez la reference: ";
         cin >> m.reference;
         m.fs << m.reference << " ";
         cout << "Entrez le resultat: ";
         cin >> m.resultat;
         m.fs << m.resultat;
     
         m.fs.close();
    }

  8. #8
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 477
    Par défaut
    Personnellement, il y a plusieurs choses que je ne comprend pas. Tu associe une mesure à un fstream, mais a chaque appels il ouvre finalement le même fichier ( "mesure.txt" ) . Il serrais ( à mon avis ) plus judicieux d'ajouter le nom du fichier à la structure mesure, plutôt qu'un fstream qui ne sert finalement qu'au traitement de lecture/écriture.

    Ensuite quand tu écris dans le fichier, tu te place au début, mais à la lecture tu "jump" a un endroit délibéré dans le fichier ( m.fs.seekg(rang * RECORD_SIZE,ios::beg); ). Mais que représente RECORD_SIZE ? quand interviens le rang ?

    Je suis peut-être à l'ouest ( ça m'arrive souvent ) mais je pense que le problème viens de la.

  9. #9
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 8
    Par défaut
    BJR
    enfaite le RECORD_SIZE représente la taille de la structure
    le rang intervient enfaite au niveau d'un menu
    la personne consulte les infos selon le rang rentré
    et je voudrais qu'il "jump" a l'endroit voulu quoi
    et comment ajouté le nom du fichier à la structure Mesure???

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

Discussions similaires

  1. Questions sur les fichiers Ressource .RC .RES
    Par dexterz dans le forum Langage
    Réponses: 10
    Dernier message: 01/08/2005, 10h15
  2. Réponses: 3
    Dernier message: 28/10/2004, 08h39
  3. Commande en shell -- Sur les fichiers
    Par OrangeBud dans le forum Linux
    Réponses: 8
    Dernier message: 18/05/2004, 13h13
  4. [C#] Authentification sur les fichiers Pdf
    Par ensisoft dans le forum ASP.NET
    Réponses: 14
    Dernier message: 04/05/2004, 12h10
  5. Réponses: 6
    Dernier message: 28/04/2004, 10h41

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