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

Discussion :

Passer une QMap entre deux objets

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut Passer une QMap entre deux objets
    Bonjour a tous,

    je voudrais savoir s'il est possible de faire passer une QMap entre deux objets via une fonction get (ou autre), j'ai essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //objet 1
    QMap objet1::getMap()
    {
       QMap<QString, QString> map();
       //remplissage de map....
       map.insert(...)
       return(map);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //objet2
       QMap<QString, QString> mapobjet2();
       mapobjet2 =objet1.getmap();//marche pas
       //ou
       mapobjet2(objet1.getmap());//marche pas non plus
    ...en vain...
    merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Points : 1 738
    Points
    1 738
    Par défaut
    map est détruit à la fin de la fonction.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //objet 1
    int objet1::getMap()
    {
      int 1 = 42;
       return(i);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //objet2
       int j = objet1.getmap();
    marche, quelle est la difference?

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QMap<QString, QString> map();
    QMap<QString, QString> mapobjet2();
    Tu ne crées pas une map, tu crées une fonction map() qui retourne une QMap<QString, QString> comme paramètre de retour. D'ailleur, tu as du avoir une erreur à cette ligne là, puisque map n'est pas une variable :
    Il faut juste écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //objet 1
    QMap<QString, QString> objet1::getMap()
    {
       QMap<QString, QString> map;
       //remplissage de map....
       map.insert(...)
       return(map);
    }
     
    //objet2
       QMap<QString, QString> mapobjet2;
       mapobjet2 = objet1.getmap(); // ça devrait fonctionner
       mapobjet2(objet1.getmap()); // et ça aussi

    map est détruit à la fin de la fonction.
    Oui mais ce n'est pas génant puisqu'elle est retournée par copie. Par contre, le problème est qu'elle est retournée par copie
    Donc cela peut avoir des conséquence en terme de performance si la map est volumineuse (sauf N/RVO). Ce que fait le N/RVO et que tu peux faire explicitement, c'est d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //objet 1
    void objet1::insertInMap(QMap<QString, QString>& map) // on passe la map par référence pour la modifier
    {
       //remplissage de map....
       map.insert(...)
    }
     
    //objet2
       QMap<QString, QString> mapobjet2;
       objet1.insertInMap(mapobjet2);
    Bon courage

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    j'avais effectivement une erreur bizzare
    merci pour ta reponse, tout marche !!!

    meme si
    Tu ne crées pas une map, tu crées une fonction map() qui retourne une QMap<QString, QString> comme paramètre de retour
    reste un peu confus pour moi, je le ferai plus promis

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/04/2020, 20h03
  2. Passer une image entre deux fonctions gui
    Par spopo2012 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 24/04/2013, 19h53
  3. faire varier une distance entre deux objets
    Par Neuropsy dans le forum VB.NET
    Réponses: 1
    Dernier message: 05/11/2009, 09h44
  4. passer une variable entre deux classes as3
    Par sanatou dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 27/06/2008, 21h52
  5. Passer une variable entre deux fenêtres
    Par DeezerD dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/08/2005, 09h52

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