Как решить проблему наследования сетки в C ++

Голова: BINGO! Вы получили это полностью - это именно то, для чего он идеально подходит. Во многих встроенных средах внешние ограничения и / или сценарий общего использования заставляют программиста отделять выделение объекта от его инициализации. Скомпонованный вместе, C ++ называет это «экземпляр»; но всякий раз, когда действие конструктора должно быть явно вызвано без динамического или автоматического распределения, размещение нового - это способ сделать это. Это также идеальный способ найти глобальный объект C ++, привязанный к адресу аппаратного компонента (I / O с памятью) или для любого статического объекта, который по какой-либо причине должен находиться по фиксированному адресу.

1
задан IoT 16 January 2019 в 22:56
поделиться

1 ответ

Проблема оказалась связана с другими виртуальными функциями внутри исходных классов, которые были в моем коде. Код выше работает без проблем. Во время разработки я столкнулся с другими проблемами, поэтому я отправил ей новый код, который решает все эти проблемы с комментариями, упомянутыми рядом с ними:

// Top Level (Level 1)

class Abstract_Class_A
{
     ~Abstract_Class_A (); // To solve source type is not polymorphic” when trying to use dynamic_cast
};

class Abstract_Class_B: virtual public Abstract_Class_A
{
  public:
  uint8_t type;
};

class Abstract_Class_C: virtual public Abstract_Class_A
{
};

// Second Level (Level 2)
class Impl_Class_A : virtual public Abstract_Class_A
{
  public:
  double angle;
};

class Impl_Class_B: virtual public Abstract_Class_B, virtual public Impl_Class_A // Missing second virtual
{
};

class Impl_Class_C: virtual public Abstract_Class_C, virtual public Impl_Class_A // Missing second virtual
{
};

void test()
{
  Impl_Class_B* test = new Impl_Class_B ();
}

Примечания:

[118 ]
  • С этим типом парадигмы наследования вы не можете использовать static_cast, вместо этого следует использовать dynamic_cast. Проверьте следующее обсуждение .
  • При использовании dynamic_cast вы должны добавить виртуальный деструктор в верхний класс. Проверьте следующее обсуждение об этом.
    0
    ответ дан IoT 16 January 2019 в 22:56
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: