C++ template function compilation error
Jinming Xu
cybermanxu@hotmail.com
Fri May 21 13:21:00 GMT 2004
llewelly,
I got it. The two operands, both left side and right side, have to be const.
That is, if I want to overload the operator< as member function, I have to
define this way:
bool operator<(Integer const& other) const
{return this->i < other.i;}
Thanks a lot for help!
Take Care.
Jinming
>From: llewelly@xmission.com
>To: "Jinming Xu" <cybermanxu@hotmail.com>
>CC: gcc-help@gcc.gnu.org
>Subject: Re: C++ template function compilation error
>Date: 20 May 2004 22:48:01 -0600
>
>"Jinming Xu" <cybermanxu@hotmail.com> writes:
>
> > Hello everyone,
> >
> > I encountered a problem while compiling a C++ program which contains a
> > built-in template function sort(). The source of the whole trouble is
> > the statement as follows:
> >
> > sort(Int.begin(),Int.end());
> >
> > where Int is a vector containing objects of a class which overloaded
> > the operator<().
> >
> > My program can be compiled with xlC_r successfully. So I want to know
> > whether gcc doesn't completely support template function or there are
> > some switches I didn't turn on. The whole code is as follows:
> >
> > //------code begins-----------------
> > #include <iostream>
> > #include <vector>
> > #include <algorithm>
> >
> > using namespace std;
> >
> > class Integer{
> > public:
> > int i;
> > Integer(int ii):i(ii){}
> > bool operator<(Integer& other)
> > {return this->i < other.i;}
> > };
>[snip]
>
>std::sort requires that operator< be able to operate on
> temporaries. But your operator< takes a reference to
> non-const. ISO C++ does not allow a temporary to be bound to a
> reference to non-const. So xlC_r is wrong to accept your code. The
> solution is to define operator< as taking references to const,
> like this:
>
>bool operator<(Integer const& lhs, Integer const& rhs)
> {return lhs.i < rhs.i;}
>
_________________________________________________________________
Is your PC infected? Get a FREE online computer virus scan from McAfee®
Security. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
More information about the Gcc-help
mailing list