Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1307 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Qt] Manipulation de QVector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Qt] Manipulation de QVector

n°1967117
ailonn
Posté le 18-02-2010 à 10:47:32  profilanswer
 

Premièrement Bonjour :D,
 
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 :
  1. #include<QVector>
  2. class A
  3. {
  4. public:
  5.     A();
  6.     ~A();
  7.     QVector<int> getVect(){return vect;}
  8.     void addVect(int i){vect.append(i);}
  9. private:
  10.     QVector<int> vect;
  11. };
  12. A::A()
  13. {
  14.     this->vect.prepend(0);
  15. }
  16. A::~A()
  17. {
  18.     this->vect.clear();
  19. }


B.cpp

Code :
  1. #include "A.h"
  2. class B
  3. {
  4.     public:
  5.     B();
  6.     A getaB(){return aB;}
  7.     private:
  8.     A aB;
  9. };
  10. B::B()
  11. {}


 
main.cpp

Code :
  1. #include <QDebug>
  2. #include "B.cpp"
  3. int main ()
  4. {
  5.     qDebug("Test avec A directement :" );
  6.     A a=A();
  7.     qDebug()<<a.getVect().size();
  8.     a.addVect(5);
  9.     qDebug()<<a.getVect().size();
  10.     qDebug("--------------------------------------------" );
  11.     qDebug("Test avec B :" );
  12.     B b;
  13.     qDebug()<<"taille avant l'appel de B::geta()::manipQcect::addvect() :"<<b.getaB().getVect().size();
  14.     b.getaB().addVect(42);
  15.     qDebug()<<b.getaB().getVect().size();
  16.     return 0;
  17. }


 
Voici la sortie :

Citation :

Test avec A directement :
1  
2  
--------------------------------------------
Test avec B :
taille avant l'appel de B::geta()::manipQcect::addvect() : 1  
1

mood
Publicité
Posté le 18-02-2010 à 10:47:32  profilanswer
 

n°1967139
ailonn
Posté le 18-02-2010 à 11:19:09  profilanswer
 

En bidouillant j'ai finis par trouver une solution :
 
Implémenter une méthode addVect(int) dans la classe B qui va appeler la méthode addVect(int) de la classe A sur l'objet aB.
 
J'ai eu l'idée en écrivant le sujet ^^"

n°1967153
Riot
Buy me a riot
Posté le 18-02-2010 à 11:41:48  profilanswer
 

Tu peux aussi renvoyer des références, au lieu de renvoyer des copies :
Dans A : QVector<int>& getVect();
Dans B : A& getaB();


---------------
Be the one with the flames.
n°1967223
ailonn
Posté le 18-02-2010 à 14:42:31  profilanswer
 

quel est l'avantage et l'inconvénient de l'un par rapport à l'autre ?

n°1967245
Riot
Buy me a riot
Posté le 18-02-2010 à 15:19:17  profilanswer
 

Tu peux modifier l'objet qui t'es retourné, c'est-à-dire que le main que tu as posté plus haut aurait le comportement que tu voulais.


---------------
Be the one with the flames.
n°1967266
ailonn
Posté le 18-02-2010 à 16:00:42  profilanswer
 

Ok, merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Qt] Manipulation de QVector

 

Sujets relatifs
[Qt/qwt] erreur de compilationQt - problème image
Manipulation de bits. (RESOLU)[Access] Manipulation de date
QT moc et templateManipulation basique de fichier texte a l'aide de Perl
Qt + Extensions OpenGLLibraire Qt
Qt aide QRegExp 
Plus de sujets relatifs à : [Qt] Manipulation de QVector


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR