Bonjour,
je crois que c'est un cas d'école mais je n'arrive pas à résoudre.
Fraichement converti aux classes,
j'ai créée avec succés des classes et des singletons, ça a été laborieux mais ça fonctionne (merci à ceux qui m'ont guider)
Je veux créer un singleton supplémentaire aujourd'hui, mais ça ne fonctionne plus, pourtant basé sur mes succés précédent et, je croyais, une bonne compréhension des notions private/public et static
Voyez-vous où se situe la ou les erreurs?
mask.h:
mask.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 #ifndef MASK_H #define MASK_H #include <opencv2/opencv.hpp> class mask { static int aaaaa; static cv::Mat imgMask[10]; //tableau de 10 cv::Mat (images) static bool matMask[640][480]; //matrice de masquage private: // constructeur et destructeur en private car singleton (une seule instanciation de la classe) mask(){}; ~mask(){}; public: static mask *getInstance(); //demande d'instanciation static void kill (); //destruction de l'instanciation static int get_aaaa(void); static void acqImageMask (cv::VideoCapture& flux); private: static mask *singleton; // }; #endif
compil:
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
35 #include "mask.h" /*****************************/ /* instanciation du singleton */ /********************************/ mask *mask::getInstance(){ if (NULL==singleton){ singleton = new mask; //check si déjà instancié aaaaa++; } return singleton; } /*******************/ /* kill le singhleton */ /*********************/ void mask::kill(){ if (NULL!=singleton){ delete singleton; singleton = NULL; aaaaa--; } } /*********************************/ /* retourne le nombre do'bjets instanciés */ /********************/ int mask::get_aaaa(void){return aaaaa;} /**********************************/ /* appelle la capture d'une image non conservée (vidage buffer) */ /*********************************/ void mask::acqImageMask(cv::VideoCapture& flux){ if (flux.read(imgMask[0])){ std::cout << "succés "<<std::endl; } else{ } }
idem pour aaaaa
Code : Sélectionner tout - Visualiser dans une fenêtre à part /............../mask.cpp|11|référence indéfinie vers « mask::singleton »|
Merci bien
Partager