erreur: implicitement supprimée car la définition par défaut serait mal formée (vecteur de structures)

Je vais avoir du mal à obtenir mon programme C++ pour compiler. Voudrais vraiment l'apprécier un peu d'aide avec cette erreur. Dans le fichier d'en-tête, j'ai ceci:

struct workerT{
 workerT() : status(true), threadSem(0){}
 bool status;
 std::function<void(void)> func;
 semaphore threadSem;
};

std::vector<workerT> workers;

Dans mon .cc fichier, je suis en train d'initialiser ce vecteur comme ceci:

fill(workers.begin(), workers.end(), workerT());

Cela échoue avec l'erreur:
erreur: ‘TP::workerT& TP::workerT::operator=(const TP::workerT&)’ est implicitement supprimé parce que la définition par défaut serait mal formé:
Il pointe vers le sémaphore.h fichier. Sémaphore.h est définie comme ceci:

 public:
  semaphore(int value = 0);
  ....

private:
  int value;
  ....
  semaphore(const semaphore& orig) = delete;
  const semaphore& operator=(const semaphore& rhs) const = delete;

Le programme compile, si je retire le "remplissage" de la ligne, mais j'en ai vraiment besoin parce que je veux initialiser le vecteur. Je reçois le même message d'erreur quand je fais un mannequin struct et essayer de push_back dans le vecteur.

Mise à jour: merci @DyP! J'ai encore besoin de l'aide de la compilation. Remplacé le "remplir" cette ligne:

std::generate(workers.begin(), workers.end(), free_func);

Ajouté exactement ce à mon en-tête:

workerT free_func(){
 return {};
}

L'obtention de ces erreurs:

thread-pool.cc: Dans le constructeur ‘pool de threads::pool de threads(size_t)’:
fil de la piscine.cc:33:58: erreur: argument de type " pool de threads::workerT (pool de threads::)()’ ne correspond pas ‘pool de threads::workerT (pool de threads::*)()’
Dans le fichier inclus à partir de /usr/include/c++/4.6/algorithme:63:0,
à partir du fil de la piscine.cc:15:
/usr/include/c++/4.6/bits/stl_algo.h: Dans la fonction " void std::generate(_FIter, _FIter, _Generator) [avec _FIter = __gnu_cxx::__normal_iterator >, _Generator = pool de threads::workerT (pool de threads::*)()]’:
fil de la piscine.cc:33:58: instancié à partir d'ici
/usr/include/c++/4.6/bits/stl_algo.h:5013:2: erreur: il faut utiliser". ’ ou ‘->’ à l'appel de pointeur vers une fonction membre dans ‘__gen (...)’, par exemple ‘(... ->* __gen) (...)’
marque: * [thread-piscine.o] Erreur 1

Mise à jour-- Dans mon .cc fichier:

 using namespace std;

 static workerT free_func(){
   return {};
 }

 ThreadPool(...args...){
   std::generate(workers.begin(), workers.end(), free_func);
 }

Erreurs:

thread-pool.cc:19:10: error: workerT does not name a type
thread-pool.cc: In constructor ThreadPool::ThreadPool(size_t)’:
thread-pool.cc:39:49: error: free_func was not declared in this scope
make: *** [thread-pool.o] Error 1

Mise à jour:

 static ThreadPool::workerT free_func(){
    return {};
 }

 ThreadPool(...args...){
   std::generate(workers.begin(), workers.end(), free_func);
 }

Dans le thread de la piscine.h:

 struct workerT{
 workerT() : status(true), threadSem(0){}
 bool status;
 std::function<void(void)> func;
 semaphore threadSem;
};

source d'informationauteur user2057841

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *