2

I have written those few line:

#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;
 }

I compile with "g++ program2.C" and the answer is:

program2.C: In function ‘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)’

I have no idea of what kind of problem it is... Can you help me??

thanks for help...

0

2 Answers 2

7

criterio is a template so you need to give the type it is templated on:

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

and the criterio function must take const references as parameters:

 template <typename var> bool criterio(const First<var> &primo, 
                                         const First<var> &secondo)
  {
     return (primo.num < secondo.num);
  }
Sign up to request clarification or add additional context in comments.

2 Comments

@Kornel Sorry, I don't get you.
@Neil, disregard that -- it's just the same old story that MSVC is a non-standard conforming compiler (works without const) :>. Comenau online properly treats the lack of const as an error.
2
sort(f.begin(),f.end(),criterio<int>);

You need to explicitly state the function you're using.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.