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

Смежные вопросы