Dereferencing a list Structure

M

Mike Copeland

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

Kai-Uwe Bux

Mike said:
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
 
R

Rolf Magnus

Mike said:
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;
 
R

Rolf Magnus

Mike said:
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;
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,043
Latest member
CannalabsCBDReview

Latest Threads

Top