Kai-Uwe Bux
11/29/2008 2:47:00 AM
Mike Copeland wrote:
> In the following code, I get a C2679 error that I don't know how to
> handle. The error says I don't have a "binary = operator", but I don't
> know what that means, nor how to correct it.
> I guess the cause of the problem lies with the string within the
> struct, but I need the comparison operator for the sort, don't I?
Well, either a comparison operator, or a specialization of std::less<>, or
you could pass a comparison predicate to sort.
BTW, where is a sort()?
> Please advise. TIA
>
> #include <string>
> #include <iostream>
> #include <list>
> #include <algorithm>
> using namespace std;
>
> struct TIMESTRUCT
> {
> string time_bib;
> bool operator <(const TIMESTRUCT &rhs) const
> {
> return time_bib < rhs.time_bib;
> }
> } workTime;
> typedef list<TIMESTRUCT> TIMEVEC;
> TIMEVEC timeVect;
> list<TIMESTRUCT>::iterator timeIter;
> int main(int argc, char *argv[])
> {
> string wsT;
>
> workTime.time_bib = "Sam", timeVect.push_back(workTime);
> workTime.time_bib = "Libby", timeVect.push_back(workTime);
> workTime.time_bib = "Bob", timeVect.push_back(workTime);
> workTime.time_bib = "Carol", timeVect.push_back(workTime);
> workTime.time_bib = "Ted", timeVect.push_back(workTime);
> workTime.time_bib = "Alice", timeVect.push_back(workTime);
> sort(timeVect.begin(), timeVect.end());
> for(timeIter = timeVect.begin(); timeIter != timeVect.end();
> timeIter++)
> {
> workTime = timeIter->time_bib; <- C2679 error
timeIter->time_bib is of type std::string
workTime is of type TIMESTRUCT
There is no assignment operator that would allow you to assign a string to a
TIMESTRUCT.
Did you mean:
workTime.time_bib = timeIter->time_bib;
> }
> return;
> }
PS.: It is usually good to reserve all upper case names for macros (and some
people include global constants). For typenames, all upper case identifiers
are probably best avoided.
Best
Kai-Uwe Bux