Comment récupérer une variable d'une classe à une autre ?
Bonjour, tout d'abord désolé si je poste au mauvais endroit. Cette question est purement du c++ mais vu que j'utilise Qt pour illustrer mon problème, je le place ici, n'hésitez pas à déplacer si besoin.
Mon problème est le suivant : j'ai une classe principale A. Je définis un objet "Aobj" qui à un slot dont la fonction est d'attribuer une valeur (10) à une variable d'une classe B. Jusque là, ça semble fonctionner. Par la suite, je voudrais qu'une classe C est également accès à la valeur de la classe B de sorte qu'une variable de la classe C ait la même valeur que la variable de la classe B. Or là, la valeur de la variable n'est pas transmise et je ne comprend pas pourquoi.
Pour rendre les choses un peu plus claires, voici un code épuré qui illustre mon problème
Lorsque je clique sur le bouton, j'obtiens le résultat suivant
A::slotChange = 10
A::slotChange, Bobj->getVar() = 10
Value : -1843854648
A::slotChange, Cobj->getVar() = -1843854648
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <QApplication>
#include "A.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
A Aobj;
Aobj.show();
return app.exec();
} |
Code:
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
| #ifndef ACLASS
#define ACLASS
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <B.h>
#include <C.h>
#include <iostream>
class A : public QWidget
{
Q_OBJECT
public:
A();
~A();
B *Bobj;
C *Cobj;
public slots:
void slotChange();
private:
QPushButton *m_button;
};
#endif //ACLASS |
Code:
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
| #include "A.h"
A::A() : QWidget()
{
Bobj = new B();
Cobj = new C();
m_button = new QPushButton("Click here");
m_button->show();
QObject::connect(m_button, SIGNAL(clicked()), this, SLOT(slotChange()));
}
A::~A()
{
delete Bobj;
delete Cobj;
}
void A::slotChange()
{
int var = 10;
std::cout << "A::slotChange = " << var << std::endl;
Bobj->setVar(var);
std::cout << "A::slotChange, Bobj->getVar() = " << Bobj->getVar() << std::endl;
std::cout << "A::slotChange, Cobj->getVar() = " << Cobj->getVar() << std::endl;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #ifndef BCLASS
#define BCLASS
class B
{
public:
B();
~B();
void setVar(int var);
int getVar();
private:
int m_myvariable;
};
#endif // BCLASS |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <B.h>
B::B()
{
}
B::~B()
{
}
void B::setVar(int var)
{
m_myvariable = var;
}
int B::getVar()
{
return m_myvariable;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #ifndef CCLASS
#define CCLASS
#include <B.h>
#include <iostream>
class C
{
public:
C();
~C();
B *Bobj;
int getVar();
private:
};
#endif // CCLASS |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <C.h>
C::C()
{
Bobj = new B();
}
C::~C()
{
delete Bobj;
}
int C::getVar()
{
std::cout << "Value : " << Bobj->getVar() << std::endl;
return Bobj->getVar();
} |
Merci d'avance car bien que ce problème soit basique, je sèche complètement.