использование дочернего класса вместо родительского класса с множественным наследованием

поэтому у меня есть иерархия классов, которая выглядит следующим образом:

Осциллятор -> AdvancingOscillator -> ViralOscillator

Лупа -> OsciMag

И OsciMag также наследуется от Oscillator (не смог правильно отформатировать, извините, если это сбивает с толку). Проблема возникает, когда я пытаюсь создать гетерогенную коллекцию OsciMags, передав разыменованный указатель (типизированный для осциллятора, но потенциально содержащий адрес производного класса) в конструктор OsciMag. У меня есть несколько конструкторов копирования, которые выглядят так:

OsciMag::OsciMag(const Oscillator& osc, const Magnifier& mag)
: Oscillator(osc), Magnifier(mag) {}

OsciMag::OsciMag(const AdvancingOscillator& osc, const Magnifier& mag)
: AdvancingOscillator(osc), Magnifier(mag) {}

OsciMag::OsciMag(const ViralOscillator& osc, const Magnifier& mag)
: ViralOscillator(osc), Magnifier(mag) {}

Проблема здесь двоякая:

  1. что программа не компилируется. Выдается две ошибки, по одной для каждого из конструкторов копирования, которые не принимают тип Oscillator. Они читают «ошибка: тип« [производный осциллятор] »не является прямым основанием« OsciMag »
  2. Я вполне уверен, что поскольку разыменованный указатель введен в Oscillator базового класса, он вызовет первый конструктор копирования.

Здесь мне нужно сделать так, чтобы класс OsciMag создавался с помощью Oscillator, AdvancingOscillator или ViralOscillator, чтобы в моей основной программе я мог иметь разнородную коллекцию.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]