C++ globally overloaded operator= [duplicate]

2019-07-15 10:40发布

问题:

Possible Duplicate:
What does “operator = must be a non-static member” mean? (C++)

Hi,

I have the following code...

// Header file
  struct dataRecord{
     size_t id;
     char name[gcNameLength];
  };

  void operator=(dataRecord &adr, const dataRecord &bdr);

How ever gcc gives me the following error when compiling.

error: ‘void operator=(dataRecord&, const dataRecord&)’ must be a nonstatic member function

Thanks for the help.

回答1:

You need to overload = operation on the struct dataRecord itself.

Something like:

struct dataRecord{
   size_t id;
   char name[gcNameLength];
   dataRecord& operator= (const dataRecord&) {
       // write overload code here
   }
};


回答2:

There is not such a thing as an operator= function. The operator has to be a member of the class or struct. The argument for that function is taken as the rvalue. The object with the member function is the lvalue.



回答3:

As stated in What does “operator = must be a non-static member” mean?, the operator overload needs to be a member function.

Note that when you overload the operator=, you should return a reference to the left operand, so it won't break the flow and will allow expressios like:

dataRecord r1;
dataRecord r2;
...
dataRecord r3 = r2 = r1;