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 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 :
- #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 :
- #include "A.h"
- class B
- {
- public:
- B();
- A getaB(){return aB;}
- private:
- A aB;
- };
- B::B()
- {}
|
main.cpp
Code :
- #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 :
Citation :
Test avec A directement :
1 2 --------------------------------------------
Test avec B :
taille avant l'appel de B::geta()::manipQcect::addvect() : 1 1
|