Bonjour
J'ai deux classes CHeisenbergSpin et CHeisenbergSpinEx dérivant de CHeisenbergSpin et l'exemple de code 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
int nStartSize = 3;
double dblPI = CTools::PI;
CHeisenbergSpin **pSpin;
pSpin = (CHeisenbergSpin**)new CHeisenbergSpinEx*[nStartSize];
for (int nIndex = 0; nIndex < nStartSize; nIndex++)
{
	pSpin[nIndex] = new CHeisenbergSpinEx[nStartSize];
	for (int i = 0; i < nStartSize; i++)
		pSpin[nIndex][i].z = 1;
}
pSpin[0][0].Compute(dblPI / 3, dblPI);
pSpin[0][1].Compute(dblPI / 2, dblPI / 3);
pSpin[2][0].Compute(dblPI / 2, dblPI / 3);
pSpin[2][1].Norm();
pSpin[2][2].Compute(dblPI / 2, dblPI / 3);
CHeisenbergSpinEx spinEx = *((CHeisenbergSpinEx*)&pSpin[2][2]);
spinEx.Compute(dblPI / 2, dblPI/3);
Dès que le 2ème indice du tableau est non nul ça génère une exception.
j'ai remarqué que cela se produit lorsqu'on que la méthode appelée est surcharchée (Compute est surchargée par la classe dérivée)
bien évidemment la ligne 17 fonctionne sans problème.

J'ai également testé le code suivant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
CHeisenbergSpin *pSpin = new CHeisenbergSpinEx[nStartSize];
pSpin[0].Compute(dblPI / 2, dblPI / 3);
pSpin[1].Compute(dblPI / 3, dblPI);
pSpin[2].Compute(dblPI, dblPI);
Les lignes 3 et 4 génèrent une exception.

Pourquoi est ce que les objets à ces positions génèrent une excption
Est ce qu'il y a un moyen d'appeller les fonctions surchargées sans faire un cast explicite

J'espère que j'ai été assez clair
Merci d'avance pour toute aide