Skip to main content
GameDev.net gamedev.net
🔒 Locked

Operator overloading and template classes .

Started by Abob Jun 3, 2003 at 11:45 PM 0 replies 750+ views
Original Post
Abob
Abob
I have templated Sorted List class that I wrote. The class works fine when I use a primitive data type(int , char, …), but if I create I list of a class that I made it gives me this error error C2678: binary ''<='' : no operator defined which takes a left-hand operand of type ''const class CCollision'' (or there is no acceptable conversion) it looks like there must be something wrong with the way I have the operators overloaded for the class. Here is the class
class CCollision {
public:

	double time;
	
	
	bool operator==(const CCollision& c) {
		return time == c.time;
	}
	bool operator>(const CCollision& c) {
		return time > c.time;
	}
	bool operator<(const CCollision& c) {
		return time < c.time;
	}
	bool operator>=(const CCollision& c) {
		return time >= c.time;
	}
	bool operator<=(const CCollision& c) {
		return time <= c.time;
	}


};
Thanks for any help.
Arrg!!
Oluseyi
Oluseyi
quote:
Original post by Abob
error C2678: binary ''<='' : no operator defined which takes a left-hand operand of type ''const class CCollision'' (or there is no acceptable conversion)
In operator dispatch, the left hand object is the one on which the operator is being called, ie lhs.operator ( rhs ). That the left hand object is const implies that you have a sorted list of const CCollisions.

Anyway, the fix is simple. A const object can only have const methods called on it - methods that do/can not change the object itself.

...
bool operator == (const CCollision& c) const
{
return time == c.time;
}
 
bool operator >(const CCollision& c) const
{
return time > c.time;
}
 
bool operator < (const CCollision& c) const
{
return time < c.time;
}
 
bool operator >= (const CCollision& c) const
{
return time >= c.time;
}
 
bool operator <= (const CCollision& c) const
{
return time <= c.time;
}
...

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.