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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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