T'y es presque! Camera ECRIT dans données. Ce sont des données de sortie pour une analyse future qui n'est pas encore faite!
Ces données sont destinées à etre utilisées par la suite!
T'y es presque! Camera ECRIT dans données. Ce sont des données de sortie pour une analyse future qui n'est pas encore faite!
Ces données sont destinées à etre utilisées par la suite!
Ah Donnees ne contient donc pas les données que le composant va "analyser" ?
Ben non !!!!
Mais je dois peut etre me débrouiller autrement !
Tu m'avais conseillé de créer une classe Données il y a quelques jours dans ce topic pour ça!
Ah, OK, donc j'ai rien compris... Je croyais que la caméra donnait au composant des données et que l'expérience travaillait ensuite sur ces données.
C'était ton idée à la base, que je n'ai fait que copier. J'espère ne pas l'avoir interprétée de travers...
Mon problème est donc celui-là: je crée à partir de Camera des Donnees. Problème: la classe porte toujours le même nom...
Je crois que mon problème est débile, mais j'arrive pas à en voir le bout:
Récapitulatif:
1) J'ai un CFP qui contient une Camera, qui elle-même contient des Données (le tout par composition). (si tu veux je peux joindre le nouveau schéma)...
2) Je voudrai accéder aux Donnees. Comment faire? EN passant par CFP?
Oui, en passant par CFP.
Mais si c'est mon idée, en tout cas, je ne vois pas laquelle
http://www.developpez.net/forums/sho...&postcount=130
Mais je suis pas sur que c'est ce que tu voulais dire !!!!
OK, c'est bien ce que je pensais
En fait, je t'ai posé la question avant, pour vérifier ça, mais ta réponse ne me donnait pas la bonne solution.
Les caméras devraient être indépendantes de tout, une classe singleton/registry qui retournent des données quand on les appelle et ces données sont stockées dans les CFP.
Mais la réponse que tu m'avais donnée m'indiquait que ces données étaient générées par le CFP, ou alors on s'est mal compris. En fait, on s'est mal compris
Pourtant, ce schéma est très intéressant: la caméra ne vit pas sa propre vie, puisque je la met dans CFP, mais cette vision a les deux avantages ci-dessus.Envoyé par poukill
Tu penses que je devrai mettre ma caméra indépendante? (plus réel, moins pratique?)
Ou alors la remettre comme précédemment dans Choc?
Sinon j'avais pensé à stocker à la fois un CFP avec sa camera associé dans un std::pair, vu qu'ils vont bien ensemble! Je pense que c'est une idée pas trop mauvaise, mais de là à voir tous les enjeux qu'il y a derrière, je m'écclipse complet là
Pour info:
Agrandir l'image pour y voir quelque chose...
Un tout autre problème...
Je suis désolé d'enchainer les questions, mais j'ai l'impression d'enchainer les problèmes... Sur un gros projet tout seul, c'est pas facile du tout....
Merci encore en tous cas pour la patience...
J'ai bien compris (enfin!) le bout de code de Luc pour le passage par référence du Choc pour "remonter à la source".
L'exemple, très parlant dans le cas d'une composition (avec Camera ici), peut-il être appilqué à un CFP* ?
Exemple:
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 #ifndef CHOC_H #define CHOC_H #include "CImg.h" #include <iostream> #include <string> #include "cfp.h" // dépendance circulaire class Choc { public: Choc (int num_choc, std::string nom_cfp); ~Choc(); void ajouterComposant(std::string); void supprimerComposant(std::string); private: std::vector<CFP*> tableau_cfp; int numero_choc; std::string nom_composant; } #endifLe problème, c'est que je ne peux pas faire quelquechose comme :
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 class Choc; // déclaration en avant, nécessaire pour les dependances circulaires class CFP { public: CFP(Choc & c); ~CFP(); CImg <unsigned short> getImageIR(); virtual setImageIR(CImg <unsigned short>) = 0; CImg <unsigned short> getImageVisible(); void setImageVisible(); virtual setZone(int) = 0; int getZone(); ajusterTailleVisibleEtIR(); private: CImg <unsigned short> image_IR_ref; CImg <unsigned short> image_visible; int zone; Choc & getChoc() {return m_choc; } Choc const& getChoc() const {return m_choc; } int getChocNum() const; Choc & m_choc; // référence => on ne change pas de contexte! }
Est-ce que je peux créer un CFP* via un new, comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Choc::Choc(....) : cfp(*this) { ... }
Je n'ai vraiment aucunes idées si ce truc marche ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CFP * comp = new CFP(*this); cfp.push_back(comp);
C'est une caméra qui doit être détruite ou les données qu'elle a acquise ?Envoyé par poukill
Tout ! Si l'utilisateur décide de changer de composant à regarder, il faut tout supprimer !
Bon, dans ce cas, autant garder les données dans la caméra...
OK je trouve ça logique aussi Miles!
Et en ce qui concerne mon message #171 ???
C'est un gros point qui bloque pour moi ! Car j'aimerai bien avoir une référence à Choc dans ma classe CFP Camera, mais je sais pas trop comment m'y prendre! (cf 171)
Merci d'avance !
Oui, tu peux sauf que new CFP(...) va planter
Les vecteurs nécessitent que les objets stockés soient copiables.Envoyé par poukill
Or tes CFP font parti d'une hierarchie d'objets polymorphes (si j'ai bien suivi). Sans feinte explicite, tu ne peut pas avoir de sémantique de copie sur les objets d'une hiérarchie polymorphes. Le défaut tend vers une sémantique d'entité avec parfois la "clonabilité".
Soit, pas de CFP dans des vecteurs. Qu'ils soient ou non instanciables.
Il ne faut pas avoir peur d'écrire plein de petites classes aux rôles bien spécialisés et aux noms qui retranscrivent bien ces rôles.
Promis, je prendrais le temps de me pencher sur ton diagramme, et de relire l'emsenble de tes specs
Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
choc.h
choc.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Choc { public: Choc (int num_choc, std::string nom_cfp); ~Choc(); void ajouterComposant(std::string); void supprimerComposant(std::string); private: std::vector<CFP*> tableau_cfp; int numero_choc; }
Là Miles, je vois pas du tout: comment passer la référence à choc, lorsqu'on est pas dans la liste d'initialisation?
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
32
33
34 Choc::Choc(int num_choc) :numero_choc(num_choc) { std::cout << "Choc numero " << numero_choc << "cree" <<std::endl ; ajouterComposant(nom_cfp); } Choc::~Choc() { std::cout << "Choc détruit"<< std::endl; } void Choc::setNumeroChoc(int nchoc) { numero_choc = nchoc; } void ajouterComposant(std::string nom_cfp) { CFP *cfp = new CFP(numero_choc, nom_cfp); // manque une ref à ce Choc! tableau_cfp.push_back(cfp); } void supprimerComposant(std::string nom_cfp) { for (int i=0; i<tableau_cfp.size(); i++) { if (tableau_cfp[i]->getNomComposant() == nom_cfp) { tableau_cfp[i] = NULL; } } }
Merci Luc pour le tuyau!Envoyé par Luc Hermitte
Je suppose qu'il en va de même avec des std::list ???
Donc il faudrait que j'utilise un tableau de CFP* ?
Je ne comprend pas ton problème. le numéro de choc a bien été initialisé pourtant ??Envoyé par poukill
Par contre, je suppose qu'il s'agit d'une faute de frappe, mais le prototype de ton constructeur dans choc.cpp n'est pas le même que dans choc.h (il manque std::string nom_cfp)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager