Problème d'appel de fonction (no matching function)
Bonjour
Je code un programme en C++, et j'ai un bug qui me bloque complètement.J'espère que je serai assez claire dans les explications de mon problème et que quelqu'un pourra m'aider...
Lorsque je fais appel à une certaine fonction de mon code, j'ai l'erreur suivante :
Code:
1 2 3 4
|
Dbscan.h:47: error: no matching function for call to Metrics::Distance<Metrics::Cosine<std::vector<double, std::allocator<double> > > >::similarite(boost::numeric::ublas::vector<double, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >&, boost::numeric::ublas::vector<double, boost::numeric::ublas::unbounded_array<double, std::allocator<double> > >&)
Distance.h:60: note: candidates are: double Metrics::Distance<Distance_Policy>::similarite(typename Distance_Policy::vector_type, typename Distance_Policy::vector_type) [with Distance_Policy = Metrics::Cosine<std::vector<double, std::allocator<double> > >] |
Je ne suis pas très à l'aise avec les template et encore moins avec les histoires de pointeurs en C++...Je suppose que l'erreur vient du type des paramètres de la fonction, ou de la déclaration de mes variables, mais je n'arrive pas à trouver le problème...
Voici la structure de mon code : (que j'ai abrégé)
J'appelle la fonction similarite de la façon suivante :
Code:
1 2 3 4
|
boost::numeric::ublas::vector<double> tempi = this->getpoints().at(i).getMesCoord(); // tempi et tempj sont juste des raccourcis
boost::numeric::ublas::vector<double> tempj = this->getpoints().at(j).getMesCoord();
this->sim(i,j) = d.similarity(tempi , tempj ); //sim(i,j) est de type matrix (cf boost) et contient des valeurs de type double |
Voici les définitions des fonctions appelées :
Code:
1 2 3
|
std::vector<Point> getpoints(); //vector de la libraire std
boost::numeric::ublas::vector<double> getMesCoord(); |
Voici le fichier où est implémentée la fonction similarite
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
namespace Metrics{
template <typename VEC_T>
class Cosine {
protected:
typedef VEC_T vector_type;
double getSimilarity(const VEC_T v1, const VEC_T v2){return 0;};
};
template <typename Distance_Policy>
class Distance : Distance_Policy
{
using Distance_Policy::getDistance;
public:
double similarity(typename Distance_Policy::vector_type x, typename Distance_Policy::vector_type y)
{
return 0;
};
};
} |
Comme vous avez pu le constater, j'utilise souvent les vector de la librairie Boost (http://www.boost.org/doc/libs/1_41_0...doc/vector.htm). Cette librairie est correctement installée. Je code sous Code::Blocks, sous Ubuntu.
Merci