C++ 针对不同的子类值在Main上调用Sort

C++ 针对不同的子类值在Main上调用Sort,c++,C++,我有一个家长类电话 Shape (ShapeTwoD.cpp) 他上了两个孩子的班 1 is Rectangle (Rectangle.cpp) 1 is Square (Square.cpp) 这里有一个变量调用区域声明为矩形和正方形,但不是形状(父对象) 所以我试着按区域升序排序,但是区域可以通过 class->getArea(); vector<ShapeTwoD*> myVector; arrayCount++ //done record width , he

我有一个家长类电话

Shape (ShapeTwoD.cpp)
他上了两个孩子的班

1 is Rectangle (Rectangle.cpp)
1 is Square (Square.cpp)
这里有一个变量调用区域声明为矩形和正方形,但不是形状(父对象)

所以我试着按区域升序排序,但是区域可以通过

class->getArea();


vector<ShapeTwoD*> myVector;
arrayCount++

//done record width , height and then compute area of the shape
假设myVector现在包含大约2个矩形和1个正方形

现在我想按面积升序对它们进行排序

但是我的getArea()函数只在子类中可用

如果我试着这么做

sort(myVector.begin(),myVector.end(),funcAreaSort);
我不确定在哪里创建funcAreaSort,接下来是如何在子区域中发送,假设它们是相同的形状类(矩形对矩形)还是不同的形状类(矩形对形状)

我如何创建一个可以通过getArea()进行比较的布尔运算符重载,然后查看哪个更适合返回a.getArea()>b.getArea()并对myVector进行排序

问题是,我在哪里创建这些函数?我本来想在main.cpp中使其成为一个免费方法,但我无法对这些函数进行排序和编译,出现了诸如限定符错误之类的错误

error: passing 'const shapeTwoD' as 'this' argument of 'virtual double shapeTwoD::getArea()' discards qualifers.
error: passing 'const shapeTwoD' as 'this' argument of 'virtual double shapeTwoD::getArea()' discards qualifers.
1) 使比较函数以
shapewod*
为参数,并在基类中具有一个
virtual
getArea
方法,该方法在子类中重写

2) 使方法
getArea
const

int getArea() const;

因为它在逻辑上是有意义的&因此您可以在
const
对象上调用它。

很难理解您的帖子,但错误可能是告诉您
getArea()
需要是
const
方法。该错误也与您所说的不兼容甚至编译?那是一个标准向量吗?如果是这样,它没有
computeArea
方法…@Lirik,我只是将computeArea作为一个函数放在child下,然后运行到setArea。其目的是显示在myVector[arrayCount]@juanchopanza中有一些区域,我应该在ShapeWod中放置getArea的const,它是用于声明的虚拟双getArea const,对于构造函数是虚拟双getArea const,ShapeWod::getArea()const{}。我确实试图使getArea()加倍,但我的CompareA函数应该如何像这样编码。如果有更多的信息就好了。尝试了几个小时,但仍然无法完成排序。
int getArea() const;