Подписи не совпадают, поэтому вы ничего не переопределяете.Найдите ключевое слово override
, чтобы компилятор помог вам диагностировать подобные ошибки.
add(const Foo<T>* rhs)
- это не то же самое, что
add(const Doo<T>* rhs)
Они принимают разные аргументы.
Они также возвращают разные типы.Но возвращаемые типы не имеют значения в разрешении перегрузки или при переопределении, но обычно это также признак того, что вы пропускаете метку (того, что вы хотите переопределить), так как обычно вы хотите, чтобы ваша переопределяющая функция возвращалатот же тип, что и тот, который переопределяет.