我想扩展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&'
为什么它不使用parent constructor,而是建议使用没有参数的默认值? 我的代码缺少什么?
答案 0 :(得分:2)
当你创建一个派生类时,就像你的ExtendedMinimumDiameter
一样,它是一个全新的类,你必须为它创建全新的构造函数。它们可以非常简单,只需调用父类构造函数(在其初始化列表中),否则为空,但您需要自己创建它们。
在这种情况下,您必须添加例如。
ExtendedMinimumDiameter(const geos::geom::Geometry* geom)
: MinimumDiameter(geom)
{}