this[0] is a valid expression elsewhere in the class implementation; it just doesn't seem to like using other overloaded operators in an operator's implementation.
this[0] does not call any overload operators in your class. "this" is a pointer. this[0] is valid (albeit strange, I wouldn't use.), this[1] is invalid. Neither call an overloaded operator. (*this) += 2 calls the classes overloaded operator +=. (*this)[i] calls the the classes overloaded operator [].

You have this in your code:
Code:
const complex<T>&
Which seemed to indicate templates somewhere.

Show us more code, and any errors you get, and where they occur.