2013-10-28 54 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