Bonsoir, j'essai de réaliser un petit jeu avec QT et notamment avec les QGraphicsRectItem et je rencontre un problème que j'avais jusqu'ici réussi a contourner.
Comme mon titre le suggère j'obtient une segmentation fault lors de l'initialisation de ma classe ( ligne 10 du cpp), voici mon .h et .cpp:
Je pense que mon problème vient de la déclaration de mon vecteur et de son type qui n'est pas standard ( int / float / string / etc) mais je n'ai pas réussi a résoudre mon problème.
Si tu désires avoir un objet qui doit gérer des allocations dynamiques avec new/delete; Il existe une règle, appelée règle des 5 qui dit que: les 5 membres spéciaux "destructeur, constructeur par copie, constructeur par déplacement, opérateur de copie et opérateur de déplacement" doivent être écrits et doivent gérer correctement la mémoire. Mais tu n'en définis aucun! Par exemple, si à un quelconque moment, tu tentes de copier un individus ou de le passer à une fonction par copie alors tu risques un gros problème. Comme on ne voit pas où tu utilises individus, je ne peux te garantir que c'est le plantage actuel. Un moyen de vérifier cela, ajoute dans la classe individus:
~individus() { for ( auto p : pop ) delete p; } // destruction "propre"
individus(individus const&) = delete; // création par copie interdite
individus& operator=(individus const&) = delete; // copie interdite
Et si ton code ne compile plus, t'indiquant qu'il ne peut pas faire une copie ou un passage paramètre d'un individus, alors c'est bien le problème.
La solution consiste à oublier ces vilains new et delete (ça fait 35 ans que je fais du C++ et il y a longtemps que je ne m'y suis pas risqué). Il faut utiliser des objets qui vont gérer les données dynamiques pour toi (par exemple le pointeur intelligent std::unique_ptr<Player>).
Tu peux fournir plus de code pour plus d'explications.
Pour l'utilisation de "individus" je déclare tout simplement une instance de "individus" dans une autre de mes classes (ce qui, je pense, est le problème que vous avez évoqué).
Update:
Bonjour
J'ai donc ajouté les membres spéciaux comme vous l'avez suggéré et j'obtiens exactement la même erreur :
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.