Функция переопределения C++ с аргументом внутреннего класса

У меня есть абстрактный график ( Aв примере). И у него есть внутренний класс, который используется для одной из функций. Я хочу получить новый класс (например) из этого класса и сделать оболочку вокруг InnerA чтобы добавить новое поле, которое следует использовать.

      class A {
public:
    class InnerA {};
    virtual void function(InnerA) = 0;
};

class B : public A {
public:
    class InnerB : InnerA {
    public:
        int new_field = 0;
    };
    void function(InnerB b) override {
        b.new_field = 1;
    }
};

Но я получаю сообщение об ошибке function в Bне может переопределить базовую функцию. Как правильно это реализовать?

      error: 'void B::function(B::InnerB)' marked 'override', but does not override
     void function(InnerB b) override {
      ^~~~~~~~

1 ответ

Тип аргумента отличается, поэтому это недопустимое переопределение.

Рассмотрим эту функцию:

      void func(A* a) {
    A::InnerA innerA;
    a->function(innerA);
}

Для действительного переопределения это должен быть действительный вызов функции производного класса, а это не так. Функция производного класса должна иметь возможность обрабатывать все вызовы функции базового класса, имея те же аргументы и тип возвращаемого значения.

Другие вопросы по тегам