Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dereferencing a list Structure

0 views
Skip to first unread message

Mike Copeland

unread,
Nov 28, 2008, 8:43:08 PM11/28/08
to
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?
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
}
return;
}

Kai-Uwe Bux

unread,
Nov 28, 2008, 9:47:28 PM11/28/08
to
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()?

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

Rolf Magnus

unread,
Nov 29, 2008, 10:02:23 AM11/29/08
to
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.

There is no such thing as a binary = operator.

> 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?

Yes. The comparison operator has nothing to do with it. Didn't your compiler
tell you which operator= it wants? It doesn't know how to assign a string to
a TIMESTRUCT, because you didn't write such an operator.
I'd say that instead of this:

> workTime = timeIter->time_bib; <- C2679 error

You actually want:

workTime = *timeIter;

Rolf Magnus

unread,
Nov 29, 2008, 10:02:52 AM11/29/08
to
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?

Yes. The comparison operator has nothing to do with it. Didn't your compiler


tell you which operator= it wants? It doesn't know how to assign a string to
a TIMESTRUCT, because you didn't write such an operator.
I'd say that instead of this:

> workTime = timeIter->time_bib; <- C2679 error

You actually want:

workTime = *timeIter;

0 new messages