Bonsoir,

J'ai un problème que j'ai réussi à reproduire avec le programme suivant :
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
#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 : Sélectionner tout - Visualiser dans une fenêtre à part
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)