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 :

Passage de conteneur en argument de fonction


Sujet :

SL & STL C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Passage de conteneur en argument de fonction
    Alors comme le dit l'intitulé, on a énormément de mal à passer notre conteneur dont la définition est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        multimap<string, class Produit*> m;
    Notre objectif est de charger une liste de Produit issus d'un txt dans la multimap définie dans le main, à l'aide d'une fonction qui est la suivante:
    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
    47
    48
    49
    50
    51
    52
    void chargementproduit ()
    {
        Hitech nouveau;
        Alimentaire nouveau1;
        string type,nomproduit,marque,categ;
        long prix,codebarre,peremp;
        FILE* fichier = NULL;
        fichier = fopen(test, "r");
     
        if(fichier != NULL)
        {
     
            while (!feof(fichier))
            {
                fscanf(fichier, "%s ",&type);
                fscanf(fichier, "%s ",&nomproduit);
                fscanf(fichier, "%s ",&marque);
                fscanf(fichier, "%f ",&prix);
                fscanf(fichier, "%f\n",&codebarre);
     
     
            if( strcmp(type,"af") || strcmp(type,"aa") )
                {
     
                 nouveau1.m_nom_produit=nomproduit;
                 nouveau1.m_marque=marque;
                 nouveau1.m_prix=prix;
                 nouveau1.m_code_barre=codebarre;
                 nouveau1.m_peremption=peremp;
                } 
     
     
     
     
            if( strcmp(type,"ht"))
                {
                  fscanf(fichier, "%f ",&categ);
                  nouveau.m_nom_produit=nomproduit;
                  nouveau.m_marque=marque;
                  nouveau.m_prix=prix;
                  nouveau.m_code_barre=codebarre;
                  nouveau.m_categorie=categ;
                } 
     
            }
        }
        else
            printf("Erreur d'ouverture du fichier : %s", nomfichier);
        fclose(fichier);
     
     return;   
    }
    A l'issue de l'initialisation de Hitech ou Alimentaire (qui sont des classes dérivées de Produit), on veut les insérer dans la multimap mais donc il nous faut la passer en argument!!

    Quelqu'un saurait nous aider?

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void chargementproduit (multimap<string, Produit*> &m);
    // ou 
    multimap<string, Produit*> chargementproduit(void);
    Ou alors je n'ai pas compris la question...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Voici un exemple que j'ai codé vite fait...


    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
     
    #include <iostream>
    #include <map>
    #include <string>
    #include <algorithm>
     
    using namespace std;
     
    //classe produit simplifiée pour l'exemple
    class Produit{
    	int a_;
    	int b_;
    public:
    	Produit(int a, int b):a_(a),b_(b){}
    	void Show(){cout << "Produit : a=" << a_ << " b=" << b_ << endl;}
    };
     
    //functor pour le for_each
    class Display{
    public:
    	void operator()(const pair <string, Produit*>& p){p.second->Show();}
    };
     
    //chargement produit simplifié pour l'exemple :-)
    void chargementproduit (multimap<string, Produit*>& m) //ATTENTION : passage par valeur =>&
    {
    	cout << "construction produits :" << endl;
    	for(int i(0); i<10; ++i){
    		//insertion dans la multimap. j'ai mis "a" à chaque fois pour l'exemple
    		m.insert(make_pair ("a", new Produit (i, i+1))); //make_pair permet de créer le couple "string, Produit*"
    	}
     
     return;   
    }
     
    //main
    void main(){
    	//création de la multimap
    	multimap<string, class Produit*> m;
     
    	//chargement des produits
    	chargementproduit(m);
     
    	//affichage du contenu de la map
    	for_each(m.begin(), m.end(), Display());
    }

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    ... et comme c'est vite fait, bien sûr j'ai oublié de détruite les objets.
    Je vous laisse rectifié de vous même, avec un 2e functor, ça devrait se faire tout seul.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Cela a encore une fois résolu nos problèmes!!Merci à nos deux anges gardiens !!

Discussions similaires

  1. Passage d'argument à une fonction
    Par free_01_binairy dans le forum Général JavaScript
    Réponses: 44
    Dernier message: 25/11/2014, 19h07
  2. Passage d'une structure en argument de fonction
    Par DDaviDD dans le forum Débuter
    Réponses: 2
    Dernier message: 19/05/2014, 07h26
  3. Réponses: 4
    Dernier message: 29/04/2010, 06h30
  4. passage des arguments aux fonctions
    Par onejock dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/09/2007, 15h00
  5. [JAVASCRIPT] passage d'argument à une fonction
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/06/2005, 18h17

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