Bonjour à tous.
Pourquoi le programme suivant (exercice 8-3 du livre Accelerated C++ ) ne marche pas?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Erreur à la ligne: « double result = median(begin, end); » erreur: no matching function for call to ‘median(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >&, __gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >&)’
Ça fonctionne en supprimant « , class T » et en remplaçant T par double, mais je perds la templétisation du renvoie de la fonction.
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 #include <iostream> #include <vector> #include <algorithm> #include <stdexcept> using namespace std; template <class It, class T> T median(It begin, It end) { if (begin == end) throw domain_error("median of an empty container"); sort(begin, end); --end; while (*begin < *end) { ++begin; --end; } return begin != end ? (*begin + *end) / 2 : *begin; } int main() { vector<double> numbers; numbers.push_back(1); numbers.push_back(3); numbers.push_back(4); numbers.push_back(5); numbers.push_back(2); numbers.push_back(6); vector<double>::iterator begin = numbers.begin(); vector<double>::iterator end = numbers.end(); double result = median(begin, end); cout << result << endl; return 0; }
Je pensais que la compilation de median avec un type de sortie double se ferait lorsque la ligne « double result = ... » serait vu.
Même en écrivant la fonction median à part dans un *.h (comme recommandé ici), le problème persiste.
Message édité pour remplacer « exercice 8-1 » par « exercice 8-3 »
Partager