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 :
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...
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> > >]
Voici la structure de mon code : (que j'ai abrégé)
J'appelle la fonction similarite de la façon suivante :
Voici les définitions des fonctions appelées :
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 le fichier où est implémentée la fonction similarite
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();
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.
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; }; }; }
Merci
Partager