soucis const_iterator/iterator sans raison apparente
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
Citation:
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:
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:
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?:oops:
Merci bcp!