Bonjour,
Je viens vers vous car j'ai un petit problème de passage de paramètre dans une méthode, et probablement aussi un petit problème de conception.
Pour simplifier, disons j'ai une classe centrale "App" qui a de nombreux traitements à faire et qui est liée à mon Affichage (Ligne de commande, ou Graphique). Elle reçoit donc les évènements des vues.
Etant donné qu'il y a tout un tas de traitements différents, la classe App instancie dans son constructeur plusieurs classes comme par exemple "CloudModule" pour séparer les traitements par "type".
La classe CloudModule a elle-même pas mal de traitements à faire et instancie aussi dans son constructeur plusieurs classes comme par exemple "FileManager".
La classe App est centrale, délègue un traitement à son module, qui déléguera aussi son traitement à un de ses Managers.
Une classe module contient tous les attributs nécessaire pour les traitements (Buffer, entiers, ...).
Les managers ont besoins des attributs du Module pour effectuer leurs traitements.
Voici un petit diagramme de classe simplifié : http://i.imgur.com/ueKTZTV.png
Mon problème se situe entre les "Modules" et les "Managers".
Au début, je me suis dis que je passerais la référence du "Module" à chaque "Manager" en l'instanciant.
Le Manager pourrait ensuite avoir accès aux attributs via la référence du module.
Mais j’ai un problème en faisant ça, à la compilation : error: no matching function for call to 'FileManager::setModule(CloudModule* const)'
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 class CloudModule { public: CloudModule(); virtual ~CloudModule(); private: FileManager fileManager; }; CloudModule::CloudModule() { this->fileManager = new FileManager(); this->fileManager->setModule(this); }
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 class FileManager { public: FileManager(); virtual ~FileManager(); void setModule(CloudModule *); protected: CloudModule *module; }; FileManager::FileManager() { } FileManager::~FileManager() { } void FileManager::setModule(CloudModule *aModule) { this->module = aModule; }
J'ai essayé de jouer avec les 'const' dans les paramètres de ma méthode, mais j'arrive pas à passer 'this' non plus si je modifie le prototype de ma méthode.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 error: no matching function for call to 'FileManager::setModule(CloudModule* const)' note: candidate is: note: void FileManager::setModule(const CloudModule*)
Du coup, je commence aussi à douter, au niveau conception, de la propreté de cette solution.
Est-ce vraiment une bonne façon de répartir des traitements vers plusieurs autres classes ?
Comment est-ce que je pourrais améliorer ce système ?
Merci d'avance.
Partager