operator overloading error

Hey fellas (and ladies?), sooooo given the following implementation, I'm getting the error below:

1
2
3
4
5
6
7
8
9
10
friend bool operator< (const intEntry& lhs, const intEntry& rhs);
//this is inside the class

bool intEntry::operator< (const intEntry& lhs, const intEntry& rhs)
{return...}
//this is in the same file, outside the class. The compiler catches here

error: 'bool intEntry::operator<(const intEntry&, const intEntry&)' 
must take exactly one argument|
//this is the error 


(intEntry is the class)

would you guys have any idea why the compiler is throwing this error?

Thanks
If you are making it a friend function.. then it is not a member function.

So this:

1
2
bool intEntry::operator< (const intEntry& lhs, const intEntry& rhs)
{return...}


Should be this:

1
2
inline bool operator< (const intEntry& lhs, const intEntry& rhs)
{return...}


Note the 2 differences:

1) it's a global function and does not use the intEntry:: scope because it's not part of that class.

2) It's marked as inline because it's a function body in a header file. This is unrelated to your current problem, but this will cause problems for you later if you don't do it.
OOOHHHH! so if its labeled 'friend' in the class, thats when you use 'inline'?
No inline has nothing to do with it being a friend.

It's like this... #include is basically a copy/paste function. So if you #include a header in multiple cpp files, everything in that header gets copy/pasted into each of those cpp files.

As a result, if you have any function bodies in your header file... the linker will get confused and will see this as the same function having two different bodies in different areas of the program. By marking the function as inline, we avoid that issue.


So when you put a function body in a header ... that is when you use inline. (for a overly simplified explanation).


Again... this has nothing to do with the function being a friend of this class.
when operator overloading,
it may be a member function if you have one parameter only.
If you need two parameters then you mustn't make it a member function.
And that means you must make it a 'friend' of your class so it can access the important information in the private section of your class. hope that helps
Topic archived. No new replies allowed.