Bonjour,

je débute en C++, et en MVC aussi tant qu'à faire :-)
je cherche à lier mes trois objets et déjà je n'ai pas trouvé sur internet une seule et bonne méthode (quelques soient les langages). Je suis donc partie de l'idée qu'on appelait le contrôleur, et qu'à l'intérieur de celui-ci on instanciait le modèle et la vue, en passant this en argument.
Est-ce que déjà dans l'idée ça vous semble correcte ? (la meilleure solution, s'il y en a une)

J'ai donc essayé cela, et ça marchait plutôt pas mal :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#include "Media_model.h"
#include "Media_view.h"
 
Media_controller::Media_controller(void){
    Media_model *model = new Media_model;
    Media_view *view = new Media_view(this);
}
Sauf que j'aimerai maintenant que ma variable view devienne un attribut de ma classe, du style :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Media_controller::Media_controller(void){
    model = new Media_model;
    view = new Media_view(this);
}
et dans le .h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#include "Media_model.h"
#include "Media_view.h"
 
class Media_controller{
    public :
        Media_controller(void);
 
    private :
        Media_model *model;
        Media_view *view;
};

et là ça ne marche plus du tout... Pour le modèle il n'y a aucun problème, ça fonctionne très bien. J'ai donc fais des tas de tests différents sur la vue, j'ai remarqué que si je passais un Int à la place de this, ça fonctionne sans problème.

Voici le code de ma vue :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#include <iostream>
#include "Media_controller.h"
 
class Media_view{
    public :
        Media_view(Media_controller *controller_);
};
et le .cpp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
#include "Media_view.h"
 
using namespace std;
 
Media_view::Media_view(Media_controller *controller_){
    cout << "Media_view" << endl;
}

Autre question aussi, j'ai lu que pour passer un objet, il fallait écrire *this, mais dans ce cas, ma vue n'accepte plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Media_controller *controller_
mais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Media_controller controller_
en argument. Ce qui fait que pour accéder à une méthode du contrôleur, je devrais utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
controller_.maMethode()
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
controler_->maMethode()
Du coup je suis perdue... je pensais que l'étoile et la flèche allaient de paire, que cela signifiait qu'on utilisait une méthode dynamique. Et à l'inverse, sans l'étoile et le point, une méthode statique.

Merci d'avance pour vos lumière, je me perds un peu :-s