Message d'erreur "list iterators incompatible" que je ne comprends pas
Bonsoir,
J'ai un problème que j'ai réussi à reproduire avec le programme suivant :
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
| #include <list>
class CMyClass
{
public:
CMyClass(void) { }
~CMyClass(void) { }
void Add(void)
{
m_class_list.push_back(CMyClass());
}
// retourne une reference sur le dernier objet de la list
CMyClass & Last(void)
{
// juste pour être sûr d'avoir au moins un objet
if(m_class_list.size() == 0)
Add();
std::list<CMyClass>::iterator it = m_class_list.end();
--it;
return *it;
}
std::list<CMyClass> m_class_list;
};
int main(int argc, wchar_t* argv[])
{
CMyClass obj;
CMyClass & last = obj;
last = obj.Last();
return 0;
} |
J'ai une erreur (debug assertion failed) que je ne comprends pas sur la partie en rouge.
Si je remonte la pile, cela provient d'ici dans le fichier source de list :
Code:
1 2 3 4 5 6 7 8 9
| bool operator==(const _Myiter& _Right) const
{ // test for iterator equality
#if _ITERATOR_DEBUG_LEVEL == 2
if (this->_Getcont() == 0
|| this->_Getcont() != _Right._Getcont())
{ // report error
_DEBUG_ERROR("list iterators incompatible");
_SCL_SECURE_INVALID_ARGUMENT;
} |
et je ne comprends pas le message : "list iterators incompatible".
Si quelqu'un sait m'expliquer ce que je fais mal ou alors peut être un bug dans l'implémentation de list de Microsoft (mais je n'y crois pas trop)
J'utilise Visual studio 2012, le fichier source de "list" est c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\list
Merci d'avance pour vos explications
PS : heu ... dans la vrai vie, ma classe est un tout petit peu plus complexe que cela mais elle est récursive comme dans l'exemple fourni (je ne sais pas si récursive est le terme adéquat)