Просто объясняю , почему ваш код не работает (как решить: см. VTT ' ответ ):
jobject MyClass::operator=(const MyClass& MyInstance)
{
return MyInstance.jobjectMember;
}
Это позволит назначить экземпляр MyClass
, назначить другой экземпляр & ndash; ну, MyClass
:
MyClass x, y;
x = y;
Однако теперь, хотя код может быть законным, он, по крайней мере, очень необычный, я бы скорее сказал, что он нарушает передовой опыт или общие соглашения: как правило, оператор присваивания возвращает назначаемый объект & ndash; правильного типа и по ссылке:
MyClass& MyClass::operator=(const MyClass& other)
{
return *this;
}
Это позволит делать такие вещи:
MyClass x, y, z;
x = y = z;
это то, что люди ожидают от назначения. Ваш вариант, напротив, позволит:
jobject o;
MyClass x, y;
o = x = y; // ???
Кроме того, вы ожидаете, что после назначения объект назначения будет таким же, как целевой объект (по крайней мере, более или менее), поэтому обычно вы также копируете объект работы:
MyClass& MyClass::operator=(MyClass const& other)
{
jobjectMember = other.jobjectMember;
return *this;
}
Наконец: если вы уже пишете пользовательские операторы присваивания, взгляните на правило из трех и правило из пяти , они могут помочь вам избежать некоторых проблем в будущем.