erreur quand je veux remplir une CList :
Voilà le principe :
A la fin de InitInstance(), j'ai :
Code:
1 2 3 4 5 6 7 8 9
|
CDocument *pDoc=NULL;
CMDIFrameWnd* pMDI=static_cast<CMDIFrameWnd*>(AfxGetMainWnd())->GetActiveFrame();
if(pMDI) pDoc=pMDI->GetActiveDocument();
pDoc->ListCamera();
pDoc->GetConnectedCam();
delete pFrame;
delete pDoc; |
Sachant que j'ai déclaré ma liste de caméras dans CMyProjectDoc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
//dans MyProjectDoc.h :
public:
typedef CList <CCamera*, CCamera*> CCameraList;
CCameraList m_CCameraList; //variable de type CCameraList;
void ListCamera(void); //pour remplir la liste
//dans MyProjectDoc.cpp :
void CMyProjectDoc::ListCamera(void)
{
CCamera1* pCamera1 = new CCamera1;
m_CCameraList.AddHead(pCamera1); // C'est ici que se situe le problème
CCamera2* pCamera2 = new CCamera2;
m_CCameraList.AddHead(pCamera2);
} |
Voilà le problème maintenant :
je suis le parcours du programme en mode debug :
il commence par s'attaque à cette ligne CDocument *pDoc=NULL;
il va donc dans document et rentre directement dans ListCamera() d'ailleurs, allez savoir pourquoi.
Bref, il voit un pointeur et donc rentre dans CCamera1.
Quand il revient, il doit donc s'attaquer à AddHead mais là, ASSERT FAILURE!
Voilà sur quoi j'atteri (fichier afxtempl.h):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
template<class TYPE, class ARG_TYPE>
POSITION CList<TYPE, ARG_TYPE>::AddHead(ARG_TYPE newElement)
{
ASSERT_VALID(this);
CNode* pNewNode = NewNode(NULL, m_pNodeHead);
pNewNode->data = newElement;
if (m_pNodeHead != NULL)
m_pNodeHead->pPrev = pNewNode;
else
m_pNodeTail = pNewNode;
m_pNodeHead = pNewNode;
return (POSITION) pNewNode;
} |
Vous voyez le problème?