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:
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
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
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{
    }
}
compil:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
/............../mask.cpp|11|référence indéfinie vers « mask::singleton »|
idem pour aaaaa

Merci bien