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
- 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 #include <QApplication> #include "A.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); A Aobj; Aobj.show(); return app.exec(); }
- A.h
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
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
- 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
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; }
- B.h
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 #ifndef BCLASS #define BCLASS class B { public: B(); ~B(); void setVar(int var); int getVar(); private: int m_myvariable; }; #endif // BCLASS
- 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
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; }
- C.h
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 #ifndef CCLASS #define CCLASS #include <B.h> #include <iostream> class C { public: C(); ~C(); B *Bobj; int getVar(); private: }; #endif // CCLASS
- C.cpp
Merci d'avance car bien que ce problème soit basique, je sèche complètement.
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 #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(); }
Partager