Если я пытаюсь скомпилировать:Почему оператор == не автоматически синтезировали для вложенных классов в C++
class Outer
{
class Inner
{
int t;
};
public:
Inner inner_;
bool operator ==(Outer rightSide);
};
bool Outer::operator ==(Outer rightSide)
{
if (inner_ == rightSide.inner_)
return true;
return false;
}
Я получаю сообщение об ошибке:
/home/martin/Projects/Experimentation/Various-build-desktop/../Various/main.cpp:18:
error: no match for ‘operator==’ in ‘((Outer*)this)->Outer::inner_ ==
rightSide.Outer::inner_’
Пожалуйста, это только я делаю что-то неправильно или это свойство C++
EDIT:
о, я никогда не понимал, что оператор == является никогда не был синтезирован, я был настолько убежден, что он синтезирован, что я не стал проверять.
Спасибо Парапура Раджкумар!
'==' никогда автоматически синтезировали ... почему бы внутренние классы любое исключение –
Прежде всего, он должен просто 'возвращение inner_ == rightSide.inner_', и, во-вторых, да, он не будет синтезирован для вас, потому что его значение неоднозначно. – Phonon
Почему вы ожидали, что компилятор даст вам неявные операторы? Ср этот вопрос http://stackoverflow.com/questions/217911/why-dont-c-compilers-define-operator-and-operator – Useless