I have something like this:
class Bar { public: pair<string,string> one; std::vector<string> cars; Bar(string one, string two, string car); }; class Car { public: string rz; Bar* owner; Car(string car, Bar* p); }; class Foo { public: Foo ( void ); ~Foo ( void ); int Count ( const string & one, const string & two) const; int comparator (const Bar & first, const Bar & second) const; std::vector<Bar> bars; }; int Foo::comparator(const Bar & first, const Bar & second) const{ return first.name < second.name; } int Foo::Count ( const string & one, const string & two ) const{ int result=0; Bar mybar = Bar( one, two, "" ); std::vector<Bar>::iterator ToFind = lower_bound(bars.begin(), bars.end(), mybar, comparator); if (ToFind != bars.end() && ToFind->one == mybar.one ){ result = ... } return result; }
The Foo::Count method should use std::lower_bound() to find the element in vector<Bar> according to a pair of two lines. Now the part that doesn't work. For lower_bound() I provide a comparator() method. I thought everything was fine, but g ++ says:
c.cpp: In member function 'int Foo::Count(const string&, const string&) const': c.cpp:42:94: error: invalid use of non-static member function std::vector<Bar>::iterator ToFind = lower_bound(bars.begin(), bars.end(), mybar, comparator);
And the Count() method should remain const ...
I am new to C ++ because I have to learn it.
Any ideas?
source share