Информация об изменениях

Сообщение Re[2]: Оператора перегрузка от 10.03.2019 15:27

Изменено 10.03.2019 15:31 rg45

Re[2]: Оператора перегрузка
Здравствуйте, LaptevVV, Вы писали:

  ccode
B>>

B>>int main()
B>>{
B>>    CObject<CNexusObject> a;
B>>    CNexusObject * b = nullptr;
   
B>>    if(a == b)   // error C2666: 'CObject<CNexusObject>::operator ==': 2 overloads have similar conversions
B>>    {
B>>    }
B>>}
B>>


LVV>Оба твоих объекта — не константные.

LVV>А между тем, и метод у тебя константный, и параметр — константа.

Константные медоды можно вызывать для неконстантных объектов — наоборот нельзя.

У него ведь проблема не в этом, а в неоднозначности — то ли применить оператор сравнения, определенный в классе, то ли применить оператор неявного преобразования, после чего сравнить сырые указатели.
Re[2]: Оператора перегрузка
Здравствуйте, LaptevVV, Вы писали:

  ccode
B>>

B>>int main()
B>>{
B>>    CObject<CNexusObject> a;
B>>    CNexusObject * b = nullptr;
   
B>>    if(a == b)   // error C2666: 'CObject<CNexusObject>::operator ==': 2 overloads have similar conversions
B>>    {
B>>    }
B>>}
B>>


LVV>Оба твоих объекта — не константные.

LVV>А между тем, и метод у тебя константный, и параметр — константа.

Константные методы можно вызывать для неконстантных объектов — наоборот нельзя.

У него ведь проблема не в константности, а в неоднозначности. Сравнение можно выполнить двумя равнозначными способами:
1) применить оператор сравнения, определенный в классе;
2) применить оператор неявного преобразования, после чего сравнить сырые указатели.