[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

Dereferencing a list Structure

mrc2323

11/29/2008 1:43:00 AM

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

3 Answers

Kai-Uwe Bux

11/29/2008 2:47:00 AM

0

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

Rolf Magnus

11/29/2008 3:02:00 PM

0

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

11/29/2008 3:03:00 PM

0

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;