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

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
les 4 op de GLignage sont :
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)

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;
   }
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
 
//_____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;
   }
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?
Merci bcp!