2013-10-28 82 views
0

我想扩展MinimumDiameter类以添加更多的方法。 我试着与经典C++语法:扩展一个GEOS类

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,而是建议使用不带参数的默认值? 我的代码缺少什么?

回答

2

当你创建一个派生类,比如你的ExtendedMinimumDiameter,它是一个全新的类,你必须为它创建全新的构造函数。它们可以非常简单,只需调用父类构造函数(在其初始化程序列表中),否则就是空的,但您需要自己创建它们。

在这种情况下,您必须添加例如

ExtendedMinimumDiameter(const geos::geom::Geometry* geom) 
    : MinimumDiameter(geom) 
{} 
+0

Thaks很多,工作!对于noob问题抱歉... – caneta

+1

永远不要担心一个问题:没有问题是一个坏问题,我们都拥有它们,否则我们永远无法学习。 – GMasucci