Bonjour, j'ai un problème avec mon code. Il semblerait que cela est du à un ajout d'héritage sur une de mes classes ( Creature1 )
Après différentes recherches sur internet :
https://stackoverflow.com/questions/...in-this-contex
(J'ai exactement la même erreur que ce lien mais je ne comprend pas comment résoudre mon code)

Il semblerait que c'est une histoire de copie de constructeur qui est passer directement et pas sous forme de pointeur.

Le code de la class qui pose problème :

Le Creature1.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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
#ifndef CREATURE1_H
#define CREATURE1_H
 
#include <QWidget>
 
#include <vector>
#include "Food.h"
 
 
class Creature1 : public QWidget
{
public:
    Creature1(QWidget *parent = nullptr);
    Creature1(std::vector<Creature1> *rangement1);
 
    void setTab(std::vector<Creature1> *a, std::vector<Food> *b);
    void mitose();
    void mourrir();
    void mort();
    bool survivre();
 
    ~Creature1();
 
signals:
 
public slots:
 
private:
 
    float m_dead;
    float m_reproduce;
    std::vector <Creature1> *m_rangement;
    std::vector <Food> *m_food;
};
 
#endif // CREATURE1_H
Le Creature1.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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 
#include "creature1.h"
#include "iostream"
#include <vector>
#include <cstdlib>
#include <stdlib.h>
#include <ctime>
 
 
using namespace std;
 
Creature1::Creature1(QWidget *parent) : QWidget(parent)
{
    m_reproduce = 10;
    m_dead = 5;
    srand(static_cast<unsigned int>(time(nullptr))); // Pour avoir un vrai aléatoire qui depend du temps
}
 
Creature1::Creature1(std::vector<Creature1> *rangement1) : m_rangement(rangement1)
{
 
}
void Creature1::setTab(std::vector<Creature1> *a, std::vector<Food> *b)
{
    m_rangement = a;
    m_food = b;
}
 
void Creature1::mitose()
{
    if((*m_rangement).size() == 1 && rand()%100 < 50)
    {
        //m_rangement->push_back(m_rangement->at(0));//ICI
    }
    else if(rand()%100 <= m_reproduce && m_food->size() >= 2) // Si on se reproduit
    {
        //m_rangement->push_back(m_rangement->at(0));//ICI
        m_food->pop_back();
    }
}
void Creature1::mourrir()
{
    if(rand()%100 <= m_dead) // si on meurt
    {
        this->mort();
    }
}
void Creature1::mort()
{
    if((*m_rangement).empty())
        {
 
        }
        else
        {
            (*m_rangement).pop_back();
        }
}
 
bool Creature1::survivre()
{
    if(!(m_food->empty())) // A de la bouffe
    {
        m_food->pop_back();
        return true;
    }
    else
    {
        this->mort();
        return false;
    }
}
Creature1::~Creature1()
{
    //dtor
}
Après plusieurs recherche le problème viens des lignes marques avec le commentaire //ICI
J'ai aussi essayer à la place de m_rangement->at(0)
Creature1() et *this
Dans chaque cas le but est de passer une instance de ma classe donc soit en la créant avec un constructeur(Creature1()) où en la faisant répliquer par elle même (*this)

Je pense que j'ai une faiblesse théorique qui m'empêche de vraiment comprendre mon erreurs et donc de la corriger donc si quelqu'un veut bien m'aiguiller ?


Je précise que le but ici est de permettre à ma class d'hériter de QWidget ou de QLabel mais le problème est le même.
Voilà je crois que j'ai tout dit merci