Put that operator inside your class definition. It must be a member because operator=
is special and you would not gain something by writing it as a non-member anyway. A non-member operator has two important main benefits:
- Implicit conversions of the right and the left side of the operator invocation
- No need to know about internals of the class. Function can be realized as non-member non-friend.
For operator=
, both is not usable. Assigning to a temporary result of a conversion does not make sense, and operator=
will need access to internals in most cases. In addition, a special operator=
is automatically provided by C++ if you don't provide one (the so-called copy-assignment operator). Making it possible to overload operator=
as a non-member would have introduced additional complexity for apparently no practical gain, and so that isn't allowed.
So change your code so that it looks like this (this assumes the operator=
is not a copy-assignment operator, but assigning from a list<T>
to something else. This isn't clear from your question):
class MyClass {
...
template<class T>
MyClass& operator=(const list<T>& lst)
{
clear();
copy(lst);
return *this;
}
...
};
It's pretty standard that a operator=
returns a reference to itself again. I recommend you to adhere to that practice. It will look familiar to programmers and could cause surprises if it would return void
all of a sudden.