2010-01-31 5 views
2

je l'ai écrit ces quelques lignes:avec fonction de tri dans l'algorithme STL

#include <vector> 
#include <algorithm> 
#include <stdlib.h> 
#include <time.h> 
using namespace std; 

template <class T> struct First 
{ 
    T num; 

    First() {} 

    First(const T &a) : num(a) {} 
}; 

template <typename var> bool criterio(First<var> &primo, First<var> &secondo) 
{ 
    return (primo.num < secondo.num); 
} 

int main() 
{ 
    vector< First<int> > f; 

    srand (time(NULL)); 
    for(int i=0; i<20; i++) f.push_back(First<int>(rand() % 20)); 

    sort(f.begin(),f.end(),criterio); 

    return 0; 
} 

je compile avec "g ++ program2.C" et la réponse est:

program2.C: En fonction « int main() ':

program2.C:28: error: no matching function for call to‘sort(__gnu_cxx::__normal_iterator*, std::vector, std::allocator > > > , __gnu_cxx::__normal_iterator*, std::vector, std::allocator > > >, unresolved overloaded function type)’

Je ne sais pas de quel genre de problème, il est ... Pouvez-vous me aider ??

grâce à l'aide ...

Répondre

2
sort(f.begin(),f.end(),criterio<int>); 

Vous devez indiquer explicitement la fonction que vous utilisez.

7

criterio est un modèle de sorte que vous devez donner le type il est templated sur:

sort(f.begin(),f.end(),criterio<int>) 

et la fonction criterio doit prendre des références const comme paramètres:

template <typename var> bool criterio(const First<var> &primo, 
             const First<var> &secondo) 
    { 
    return (primo.num < secondo.num); 
    } 
+0

Il devrait, mais il MUSN » t? –

+0

@Kornel Désolé, je ne vous comprends pas. –

+0

@Neil, ne tenez pas compte du fait que c'est la même vieille histoire que MSVC est un compilateur conforme non standard (works without const):>. Comenau online traite correctement le manque de const comme une erreur. –