Impossible de trouver de la lecture sur le même cas que ce qui me bloque, donc voilà mon probleme :
J'ai les classes suivantes :
puis les fonctions suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template<class T> class Idx {...} template<class T> class spIdx : public Idx<T> {...}
Enfin, je fais l'appel suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void myfunc(Idx<double> &i1, Idx<double> &i2, Idx<double> &i3); template<class T> void myfunc(spIdx<T> &i1, Idx<T> &i2, Idx<T> &i3);
J'obtiens alors l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 spIdx<double> sptest(0, 4, 4); Idx<double> x(4), y(4); myfunc(sptest, x, y);
" erreur: call of overloaded «myfunc(ebl::spIdx<double>&, ebl::Idx<double>&, ebl::Idx<double>&)» is ambiguous
note: candidats sont: void myfunc(ebl::spIdx<T>&, ebl::Idx<T>&, ebl::Idx<T>&) [with T = double]
note: void myfunc(ebl::Idx<double>&, ebl::Idx<double>&, ebl::Idx<double>&) "
Comment régler ce problème ? et pourquoi le compilateur ne choisit-il pas la version dont la signature (bien que templatée) correspond (appel à la sous-classe spIdx) ?
J'ai essayé de caster la variable dans son propre type lors de l'appel à la fonction (ie idx_m2dotm1(static_cast<spIdx<double>&>(sptest), x, y);
Bien evidemment je ne veux pas changer le nom des fonctions, le but étant que l'utilisateur n'aie pas à se soucier de la classe utilisée...
Partager