Я хотел бы расширить класс MinimumDiameter, чтобы добавить еще несколько методов.
Я пробовал с классическим синтаксисом C ++:
class ExtendedMinimumDiameter : public MinimumDiameter{};
ExtendedMinimumDiameter *minimumDiameter = new ExtendedMinimumDiameter(inputGeometry);
Проблема в том, что когда я пытаюсь создать экземпляр объекта моего нового класса, gcc-4.8.2 выдает следующее:
operators.cpp:194:92: error: no matching function for call to 'ExtendedMinimumDiameter::ExtendedMinimumDiameter(const geos::geom::Geometry*&)'
ExtendedMinimumDiameter minimumDiameter = ExtendedMinimumDiameter(inputGeometry);
^
operators.cpp:194:92: note: candidates are:
operators.cpp:116:7: note: ExtendedMinimumDiameter::ExtendedMinimumDiameter()
class ExtendedMinimumDiameter : public MinimumDiameter{
^
operators.cpp:116:7: note: candidate expects 0 arguments, 1 provided
operators.cpp:116:7: note: ExtendedMinimumDiameter::ExtendedMinimumDiameter(const ExtendedMinimumDiameter&)
operators.cpp:116:7: note: no known conversion for argument 1 from 'const geos::geom::Geometry*' to 'const ExtendedMinimumDiameter&'
Почему он не использует родительский конструктор, и предлагает вместо этого использовать по умолчанию без параметров?
Чего не хватает в моем коде?
Когда вы создаете производный класс, как ваш ExtendedMinimumDiameter
Это совершенно новый класс, и вы должны создать для него совершенно новые конструкторы. Они могут быть очень простыми и просто вызывать конструкторы родительских классов (в их списках инициализаторов) и в противном случае быть пустыми, но вам нужно сделать их самостоятельно.
В этом случае вы должны добавить, например,
ExtendedMinimumDiameter(const geos::geom::Geometry* geom)
: MinimumDiameter(geom)
{}
Других решений пока нет …