OVH Cloud OVH Cloud

STL et itérateurs

11 réponses
Avatar
Hamiral
Bonjour,

Je me suis remis très récemment au C++, et je me trouve avec un problème
d'itérateur que je n'arrive pas à résoudre. Il me semblait que ce serait
plutôt trivial, il s'agit de parcourir une std::list avec un itérateur,
dans une fonction operator=.
Le problème est le suivant : j'ai une classe Level et une classe Ball.
La classe Level contient la déclaration suivante (en protected) :
std::list<Ball> mBalls;

et voici mon operator= :
Level& Level::operator=(const Level & level) {
mBalls.clear();

std::list<Ball>::iterator iter;
for (iter = level.mBalls.begin(); iter != level.mBalls.end();
++iter) {
mBalls.push_back(*iter);
}
}

Je pensais que c'était comme cela qu'on utilise les itérateurs, mais le
compilateur me sort systématiquement l'erreur suivante :

level.cpp: Dans member function « Level& Level::operator=(const Level&) »:
level.cpp:7: error: no match for 'operator=' in 'iter = std::list<_Tp,
_Alloc>::begin() const [with _Tp = Ball, _Alloc =
std::allocator<Ball>]()'
/usr/include/c++/3.3/bits/stl_list.h:145: error: candidates are:
std::_List_iterator<Ball, Ball&, Ball*>& std::_List_iterator<Ball, Ball&,
Ball*>::operator=(const std::_List_iterator<Ball, Ball&, Ball*>&)


Je n'y comprends rien et ce malgré toute les recherches que j'ai pu
faire sur le net ...

Merci d'avance pour votre aide.

--
Hamiral

1 réponse

1 2
Avatar
Hamiral
Merci à tous pour vos réponses éclairées, j'y vois plus clair (!)
maintenant. Je comprends maintenant un peu mieux la philosophie de
const, le fonctionnement de l'opérateur d'affectation, et un infime pan
de la STL.
La seule chose qui me désappointe quelque peu, c'est le manque de clarté
(c'est le moins que l'on puisse dire) dans le message d'erreur fourni
par le compilateur ...

--
Hamiral
1 2