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 :

Problème de vector


Sujet :

SL & STL C++

  1. #1
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut Problème de vector
    Bonjour a tous,
    je dois simuler un programme qui permet de lire un fichier et écrire ces ifnormation dans des vector d'objet de type "adherent" c'est a dire 4 string : nom prenom adresse v ille et un entier code postal
    Tout allait bien quand je faisais saisir ces infos directement dans le constructeur adhérent puisque je faisais
    pop_back(new adherent());
    mais la en lisant un fichier, je mets les informations dans des variable et je pensais faire un truc du style :
    pop_back(new adherent(nom, prenom, ..., ..., ...));

    N'ai je pas el droit de faire ca? Evidemment avant de faire ca jai creer un autre constructeur avec ces 5 arguments...
    Merci d'avance
    Benjamin

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Pourquoi utilises-tu des pointeurs ?
    Boost ftw

  3. #3
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    ben... parce que j'ai envie... c'est comme ca que j'ai commencer mais je ne pense pas que le problème vienne vraiment de la si?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je suppose que tu voulais dire "push_back" et non "pop_back".

    Tu as bien entendu le droit de le faire, quel est le problème au juste ?

    Remarque qui ne mange pas de pain : mon intuition me dit qu'ici tu n'as pas besoin de stocker des pointeurs...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Heu ! qu'est ce qui bloque exactement ?
    en supposant un vecteur de pointeurs, tu peux effectivement faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::vector<adhrent *> MyVector;
     //puis... à chaque que les infos sont lues faire:
    //lire nom, lire prenom,...
    MyVector.push_back(new adherent(nom, prenom,...));
    Ne pas oublier de faire une boucle pour deleter le vecteur(un clear ne suffit pas)

    Sinon, le plus simple est de stocker un vecteur d'objets.

  6. #6
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    ben ecoutez le compilateur me mets ca :

    114 C:\correc\main.cpp no matching function for call to `adherent::adherent(std::string&, std::string&, std::string&, int&, std::string&)'
    Voici le constructeur avec entrées, tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    adherent::adherent(std::string nom, std::string prenom, std::string adresse, int codepos, std::string nom_ville){
    nom_adh = nom;
    prenom_adh = prenom;
    adresse_adh.nom_rue = adresse;
    adresse_adh.code_postal = codepos;
    adresse_adh.ville = nom_ville;
    }
    et voila le moment ou je l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pil.push_back(new adherent(nom, prenom, adres, code_p, villen));

    Et oui je suis désolé c'est bien push back dont je parlais, vraiment désolé!

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut
    Visiblement, le compilateur recherche autre chose.
    Verifer que nom, prenom,... sont bien valides et de type std::string avant l'appel du new.

    Sinon, rien d'anormal dans ce code.
    Pouvons-nous voir les déclarations des variables et du vecteur ,

  8. #8
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    pas de problème;

    vector<adherent*> pil;
    string nom=0;
    string prenom=0;
    string villen=0;
    int code_p=0;
    string adres=0;

    le problème c'est que je lis un .txt
    ya une info par ligne donc je lis ligne par ligne pdt 5 lignes et je crée un vector apres je reviens a 0 etc...
    donc pour le code postal que jai declarer en entier jutilise la methode de traduire le string en entier qu'il y a marqué dans la FAQ. donc c'est le seul truc dont je ne suis pas vraiment sur.

    Ben

  9. #9
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Hum dans le message du compilateur il y a des références comme argments, pas dans le constructeur que tu nous a montré...
    En théorie le constructeur et la fonction recherché n'est pas la même car pas la même signature...
    il vaudrai mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    adherent::adherent(const std::string& nom, const std::string& prenom, const std::string& adresse, const int codepos, const std::string& nom_ville){ 
    nom_adh = nom; 
    prenom_adh = prenom; 
    adresse_adh.nom_rue = adresse; 
    adresse_adh.code_postal = codepos; 
    adresse_adh.ville = nom_ville; 
    }
    ça éviterai des copies....
    Sinon ta class adherent possède-t-elle un constructeur de copie ? Ou le compilateur peut-il en générer un (il est peut-être en protected ou en private.) Si c'est le cas le problème vient de la car on ne peut introduire dans un vector que des objets qui possèdent un constructeur de copie...
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 47
    Points : 47
    Points
    47
    Par défaut
    Ben a priori, il manipule des pointeurs, donc pas de problème de constructeur de copie...

  11. #11
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    non, ils sont en public mais meme en changeant les types d'arguments ca fait la meme erreur...
    desolé


    voila ce quil met:
    114 C:\correc\main.cpp no matching function for call to `adherent::adherent(std::string&, std::string&, std::string&, int&, std::string&)'

    note C:\correc\adherent.h:14 candidates are: adherent::adherent(const adherent&)

    note C:\correc\adherent.h:14 adherent::adherent()



    et exactement pareil pour l'autre

    Benjamin

  12. #12
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    je ne comrpend vraiment pas ou est l'erreur... Voici un autre bout de code :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    else if(f==5){// debut chargement
    std::ifstream fichier("boby.txt");
     long code_postal;
     std::string ligne; // variable contenant chaque ligne lue
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            while ( std::getline( fichier, ligne ) )
            {
                if(g==0){
                 nom = ligne;
                 g++;
                 }   
                 else if(g==1){
                 prenom=ligne;
                 g++;
                 }       
                else if(g==2){
                 adres=ligne;
                  g++;
                  }
                else if(g==3){
                std::istringstream iss(ligne);
                iss >> code_p;
                g++;     
                }       
                else if(g==4){
                villen =ligne;            
                g=0;
                pil.push_back(new adherent(nom, prenom, adres, code_p, villen));
                /*nom=0;
                prenom=0;
                adres=0;
                code_p;
                villen=0;*/
                }
     
     
                // afficher la ligne à l'écran
                std::cout << ligne << std::endl;
            }
     
     
     
     
    }// fin chargement

  13. #13
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    T'as pas du déclarer adherent(std::string, std::string, std::string, int, std::string) dans ta classe.
    Boost ftw

  14. #14
    Membre actif Avatar de jamesleouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 522
    Points : 243
    Points
    243
    Par défaut
    en effet...
    chui trop naze.
    Par contre ca ne marche quand meme pas...
    des que le programme s'éxécute la fenetre s'ouvre et se ferme tout de suite sans que je ne puisse rien faire.
    Benjamin


    Ps : je pense aller me coucher donc je ne pourrai peut etre pas repondre tout de suite

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

Discussions similaires

  1. Problème de vector
    Par Sachiel31 dans le forum SL & STL
    Réponses: 82
    Dernier message: 11/07/2006, 09h44
  2. Problème redimensionnement vector
    Par Zacks dans le forum SL & STL
    Réponses: 2
    Dernier message: 19/06/2006, 15h18
  3. [Debutant][Vector]Petit problème de vector
    Par GyZmoO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/05/2006, 10h39
  4. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25
  5. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45

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