Bonjour,
J'ai une série de classe représentant in fine, chacun, une liste de la classe précédente (parce que l'héritage fait n'imp)
Pour illustrer :
class A{};
class B{list<A> listAname};
class C{list<B> listBname};
donc c'est pas sorcier. J'ai fait les 4 opérateurs de base (constructeur, destructeur, recopie, =) comme il faut pour A et B et pour ceux de C...un "petit" soucis lors de la compilation. Je n'arrive pas à comprendre le message d'erreur reçu ou ce qu'il indique.
Le message est le suivant :
avec class B:=GLignage et class C:=GPattern
les 4 op de GLignage sont :C:/INFORMATIQUE/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/bits/list.tcc:129: error: no match for 'operator=' in '(&(&__first1)->std::_List_iterator<_Tp>::operator++ [with _Tp = GLignage](0))->std::_List_iterator<_Tp>::operator* [with _Tp = GLignage]() = (&(&__first2)->std::_List_const_iterator<_Tp>::operator++ [with _Tp = GLignage](0))->std::_List_const_iterator<_Tp>::operator* [with _Tp = GLignage]()'
mingw32-make[1]: Leaving directory `C:/INFORMATIQUE/eclipse/WorkFILE/Geo_Morph'
src\Data\GPattern\/GLignage.h:42: note: candidates are: GLignage& GLignage::operator=(GLignage&)
mingw32-make[1]: *** [release\GKompac.o] Error 1
avec lignage=listAname (même si c'est un vector en fait ^_^...ça doit pas changer grand chose, si?)
GSegment la classe en dessous de A... (2 int simplement)
et pour la classe C :
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 //_____Constructeur par defaut_____// GLignage::GLignage() { transseg=GSegment(0,0); lignage.push_back(transseg); } //_____Constructeur_____// GLignage::GLignage(GSegment& seg, vector<GSegment>& vect) { if(seg.longueur()+1!=(int)vect.size()) { transseg=GSegment(0,0); lignage.push_back(transseg); } else { transseg=seg; lignage=vect; } } //_____Constructeur simple_____// GLignage::GLignage(GSegment& seg, int position) { transseg=GSegment(position,position); lignage.push_back(seg); } //_____Destructeur_____// GLignage::~GLignage() { } //_____Constructeur de recopie_____// GLignage::GLignage(const GLignage& glig) { if(&glig!=this) { transseg=glig.transseg; lignage=glig.lignage; } } //_____Operateur d'affectation_____// GLignage& GLignage::operator=(GLignage& glig) { if(&glig!=this) { transseg=glig.transseg; lignage=glig.lignage; } return *this; }
si je regarde bien le message, il semble qu'il y ait conflit entre const_iterator et iterator... quelqu'un pourrait-il me dire d'où ça peut venir?
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 //_____Constructeur_____// GKompac::GKompac() //par défaut, vide { GLignage glig; LightPtr.push_back(glig); } //_____Constructeur utile_____// GKompac::GKompac(GLignage& gg) { LightPtr.push_back(gg); } //_____Destructeur_____// GKompac::~GKompac() {} //_____Constructeur de recopie_____// GKompac::GKompac(const GKompac& gpat) { if(&gpat!=this) { //todo//LightPtr=gpat.LightPtr; //mais provoque le message d'erreur (si activé!) } } //_____Operateur d'affectation_____// GKompac& GKompac::operator=(GKompac& gpat) { if(&gpat!=this) { LightPtr=gpat.LightPtr; //qui provoque le message d'erreur (si activé!) } return *this; }
Merci bcp!
Partager