Bonjour à tous et merci d'avance pour votre aide
J'ai un problème dans mon code, car j'ai besoin de d'avoir deux classe qui se contienne l'une l'autre sous forme de shared_ptr. J'ai essayer d'utiliser un weak_ptr pour casser la dépendance, mais je le fais mal, le programme crash quand je le créer.
Je suis en train de faire un pattern state, d'ou la dépendance.
Voici mon code.
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 #ifndef CCLIENT_H_INCLUDED #define CCLIENT_H_INCLUDED #include <memory> #include "etat.h" class client { private: std::shared_ptr<etat> etat1_; std::shared_ptr<etat> etat2_; std::shared_ptr<etat> etatCourant_; public: client(); void action(); void setEtatCourant(std::shared_ptr<etat> etat); std::shared_ptr<etat> getEtat1(); std::shared_ptr<etat> getEtat2(); }; #endif // CCLIENT_H_INCLUDED
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 #include "client.h" #include "etat.h" client::client() : etat1_(new etat(this)), etat2_(new etat(this)) { etatCourant_ = etat1_; } void client::action() { etatCourant_->action(); } void client::setEtatCourant(std::shared_ptr<etat> etat) { etatCourant_ = etat; } std::shared_ptr<etat> client::getEtat1() { return etat1_; } std::shared_ptr<etat> client::getEtat2() { return etat2_; }
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 #ifndef CETAT_H_INCLUDED #define CETAT_H_INCLUDED #include <memory> class client; class etat { private: std::weak_ptr<client> client_; public: etat(client* c); void action(); }; #endif // CETAT_H_INCLUDED
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "client.h" #include "etat.h" #include <iostream> etat::etat(client* c) : client_ (std::shared_ptr<client>(c)) { } void etat::action() { client_.lock()->setEtatCourant(client_.lock()->getEtat2()); client_.reset(); }
Partager