Сообщение Изменение сигнатуры виртуальной функции от 18.04.2023 14:13
Изменено 18.04.2023 14:15 Muxa
Изменение сигнатуры виртуальной функции
Есть два класса — первый определяет интерфейс, второй его реализует:
Но в сигнатурах функций-реализаций я заменил тип I на C.
Первые две функции компилятор (gcc/clang) прожевывает без проблем, а на вторые две выдает ошибку
Почему компилятор такое позволяет для F0 и F1, но не позволяет для F2 и F3?
class I
{
virtual I* F0() = 0;
virtual I& F1() = 0;
virtual void F2(I*) = 0;
virtual void F3(I&) = 0;
};
class C : public I
{
C* F0() override { return this; }
C& F1() override { return *this; }
void F2(C*) override {}
void F3(C&) override {}
};
Но в сигнатурах функций-реализаций я заменил тип I на C.
Первые две функции компилятор (gcc/clang) прожевывает без проблем, а на вторые две выдает ошибку
'void C::F2(C*)' marked 'override', but does not override
Почему компилятор такое позволяет для F0 и F1, но не позволяет для F2 и F3?
Изменение сигнатуры виртуальной функции
Есть два класса — первый определяет интерфейс, второй его реализует:
В сигнатурах функций-реализаций я заменил тип I на C.
Первые две функции компилятор (gcc/clang) прожевывает без проблем, а на вторые две выдает ошибку
Почему компилятор такое позволяет для F0 и F1, но не позволяет для F2 и F3?
class I
{
virtual I* F0() = 0;
virtual I& F1() = 0;
virtual void F2(I*) = 0;
virtual void F3(I&) = 0;
};
class C : public I
{
C* F0() override { return this; }
C& F1() override { return *this; }
void F2(C*) override {}
void F3(C&) override {}
};
https://godbolt.org/z/qd4so7TW3В сигнатурах функций-реализаций я заменил тип I на C.
Первые две функции компилятор (gcc/clang) прожевывает без проблем, а на вторые две выдает ошибку
'void C::F2(C*)' marked 'override', but does not override
Почему компилятор такое позволяет для F0 и F1, но не позволяет для F2 и F3?