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 :

Probleme de manipulation d'un QVector

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut Probleme de manipulation d'un QVector
    Premièrement Bonjour ,

    Mon problème d'aujourd'hui est le suivant :

    J'ai une classe A dans la quelle j'ai un QVector d'entier en private,
    ainsi qu'une méthode qui retourne ce vector,
    une autre qui permet d'insérer une valeur à la fin du vector.
    Ces deux méthodes sont déclaré en public toujours dans ma classe A.

    Lorsque dans mon main je crée un objet a de la classe A et que j'utilise les deux méthodes sus-nommé mon vector voit ça taille varier de manière "définitive".

    Le problème est lorsque je crée un objet, a, de la classe A, en private, dans une classe B qui possède une méthode retournant l'objet a et que dans mon main je crée un objet, b, de la classe B et que je souhaite modifier insérer une nouvelle valeur à l'objet a ça fonctionne uniquement le temps de la méthode d'insertion, car à la sortie de cette méthode il appel les destructeur et remets le vector contenue dans l'objet a à la taille qu'il avait à la sortie du constructeurs de b.

    J'essaye de comprendre pourquoi comprendre depuis hier et je ne vois pas le pourquoi ni une solution possible c'est pour quoi je me tourne vers vous.

    Ne sachant si mes explications sont clairs voici le code :

    A.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
    23
     
    #include<QVector>
    class A
    {
    public:
        A();
        ~A();
     
        QVector<int> getVect(){return vect;}
        void addVect(int i){vect.append(i);}
     
    private:
        QVector<int> vect;
    };
     
    A::A()
    {
        this->vect.prepend(0);
    }
    A::~A()
    {
        this->vect.clear();
    }
    B.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "A.h"
     
    class B
    {
        public:
        B();
        A getaB(){return aB;}
        private:
        A aB;
    };
     
    B::B()
    {}
    main.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
    #include <QDebug>
    #include "B.cpp"
     
     
     
     
    int main ()
    {
        qDebug("Test avec A directement :");
        A a=A();
        qDebug()<<a.getVect().size();
        a.addVect(5);
        qDebug()<<a.getVect().size();
        qDebug("--------------------------------------------");
        qDebug("Test avec B :");
        B b;
        qDebug()<<"taille avant l'appel de B::geta()::manipQcect::addvect() :"<<b.getaB().getVect().size();
        b.getaB().addVect(42);
        qDebug()<<b.getaB().getVect().size();
        return 0;
    }
    Voici la sortie :
    Test avec A directement :
    1
    2
    --------------------------------------------
    Test avec B :
    taille avant l'appel de B::geta()::manipQcect::addvect() : 1
    1

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    En changeant un tout petit peu le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        qDebug("Test avec B :");
        B b;
        qDebug()<<"taille avant l'appel de B::geta()::manipQcect::addvect() :"<<b.getaB()->getVect().size();
        A *ab = b.getaB();
        ab->addVect(42);
        qDebug()<<b.getaB()->getVect().size();
    On change le résultat :

    --------------------------------------------
    Test avec B :
    taille avant l'appel de B::geta()::manipQcect::addvect() : 1
    2
    Dans ton exemple, ton objet est recopié et non passé par référence, ce qui fait que l'ajout est perdu.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Mercis beaucoup
    Je n'avais pas vue a comme ça.

    De mon côté j'avais continué à bidouiller et je m'en suis sortie en redéfinissant une méthode addVect(int) dans la classe B qui appelle addVect(int) de la classe A.

    Mercis encore.

    Bonne journée

  4. #4
    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
    perso, je préfère une reference (et getaB retourne une reference bien sure)

    Attention ailonn , le C++ e n'est pas comme en java ou C# ou tout est référence

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Citation Envoyé par yan Voir le message
    Attention ailonn , le C++ e n'est pas comme en java ou C# ou tout est référence
    Mince je suis démasqué...
    J'avoue...
    En cour on m'a fait faire du java.
    Je suis contaminé

  6. #6
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Royaume-Uni

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

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Par défaut
    Citation Envoyé par ailonn Voir le message
    Mince je suis démasqué...
    J'avoue...
    En cour on m'a fait faire du java.
    Je suis contaminé
    On ne peut plus rien faire, il faut t'achever

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

Discussions similaires

  1. probleme de manipulation de chaine de caracteres
    Par albc17180 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 20/08/2008, 11h40
  2. DEBUTANT : probleme de manipulation
    Par 7awela dans le forum Débuter
    Réponses: 4
    Dernier message: 25/11/2007, 13h11
  3. Réponses: 6
    Dernier message: 28/06/2007, 11h06
  4. probleme de manipulation de fichier excell
    Par obydissonn dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/03/2007, 13h21

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