Bonsoir,

je tombe sur un résultat étrange lors d'utilisation de pointeur de fonction generique.

J'utilise deux pointeurs de fonctions génériques de la forme suivante:

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
template<class T>
void AVLTree<T>::Fonction(T &data) {
	cout << "val : " << data.getA().getX() << " " 
		 << data.getA().getY() << " " 
		 << data.getB().getX() << " " 
		 << data.getB().getY() << " " 
		 << "Type : " << data.getA().getType() << " "
		 << "Num  : " << data.getA().getNum() << endl;
}
 
template <class T>
void AVLTree<T>::GetNumSeg(T &data, QVector<T> &v, Point &p) {
	if(data.getNum() == p.m_num_seg_1 ||
	  (data.getNum() == p.m_num_seg_2))
 
		v.append(data);
}
que je passe en tant que paramètre respectivement aux fonctions suivantes:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
void parcours_prefixe(CNode<T> *, void (*f) (T &));
 
void parcours_prefixe_get(CNode<T> *, QVector<T> &, Point &,
				   void (*f) (T &, QVector<T> &, Point &));
Pour le premier template et pointeur de fonction, l'appel suivant est correct:
où sweep_line et un AVLTree<Segment>, getRacine() retourne un CNoeud<T> *
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
sweep_line.parcours_prefixe(sweep_line.getRacine(), Fonction);
mais lorsque je fait l'appel de parcours_prefixe_get suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
sweep_line.parcours_prefixe_get(sweep_line.getRacine(), 
					    twoseg, event,
					    GetNumSeg);
j'obtiens une erreur de undefined alors que twoseg est bien un QVector<Segment>, event un point.

Est ce que l'erreur vient du fait que j'utilise des paramêtres passé à parcours_prefixe_get dans GetNumSeg ?

Merci de vos éclaircissements.