Re: Return class record std::list
* XX:
Please help, and thanks.....
How to compare iterator with class [s==skip_share].
Return iterator as a class record [return s;].
error C2678: binary '==' : no operator found which takes a left-hand operand
of type 'std::list<_Ty>::_Iterator<_Secure_validation>' (or there is no
acceptable conversion)
error C2440: 'return' : cannot convert from
'std::list<_Ty>::_Iterator<_Secure_validation>' to 'cShare *'
#include <list>
using namespace std;
class cShare {
private:
int connection_id;
public:
cShare(int _connection_id);
int Get_connection_id(void) const { return connection_id; };
};
You're using a lot of prefixes, "c...", "_...", "Get_". They serve no useful
purpose and reduce readability. On the other hand, a prefix on the data member
name would be useful, but is lacking.
cShare::cShare(int _connection_id)
{
connection_id = _connection_id;
}
When there's no special reason to use assignment, consider a memory initialiser
list:
cShare::cShare( int id )
: connection_id( id )
{}
class cShares
{
private:
list<cShare> cshares;
public:
cShares();
virtual ~cShares();
cShare *cShares::SearchCon(int connection_id, cShare *skip_share);
};
For this functionality, if cShare in actuality holds more information than just
an id then you'd be better off using a std::map.
If it just holds an id then the functionality amounts to a std::set.
cShares::cShares()
{
}
cShares::~cShares()
{
}
cShare *cShares::SearchCon(int connection_id, cShare *skip_share)
{
list<cShare>::const_iterator s;
for (s = cshares.begin(); s != cshares.end(); ++s) {
if(s==skip_share) continue;
A list iterator is not a pointer to a list element.
You might check the id:
if(
skip_share != 0 &&
s->Get_connection_id() == skip_share->Get_connection_id()
)
If skip_share can't be 0 then you should pass it by reference, not as a pointer.
if(s->Get_connection_id()==connection_id) return s;
Ditto: 's' is a list iterator, not a pointer to cShare.
You can do
return &*s;
}
return NULL;
}
tShares!, & hth.,
- Alf