Info:
Parent Class: Vehicle
Child Class : Car & Lorry
我有一个向量,我试图按升序对其进行排序
排序(myVector.begin(),myVector.end(),compareByArea);
所以在 Vehicle.h
我做了
class VehicleTwoD
{
private:
//some variable
public:
bool compareByArea(const VehicleTwoD,const VehicleTwoD);
}
在 Vehicle.cpp 我做到了
bool VehicleTwoD::compareByArea(const VehicleTwoD &a,const VehicleTwoD &b)
{
return a.getArea() < b.getArea();
}
错误是 VehicleTwoD 没有名为 getArea 的成员。
它位于我的孩子 Car & Lorry 和双区也申报在孩子。
但问题是如果我想通过这种方式排序,我可以通过使用 virtual 来实现它,然后我在 child 处创建相同的方法,但重载它并通过这种方式让我的区域排序
有没有更好的方法来做到这一点。
感谢大家的帮助!
Additional Info:
我在 Car & Lorry 有这个 getArea() 函数,这只是一个简单的
double Car::getArea()
{ return area;}
double Lorry::getArea()
{ return area;}
但是现在当我在向量中得到一个对象列表时,它们每个都是不同类的孩子。但是都有getArea函数,我想对这个向量进行排序
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),compareArea);
//但是排序不起作用。
我不知道在哪里创建可以 getArea() 的对象 1 与对象 2 并返回 bool 结果的 compareArea;
我尝试使用它在 VehicleTwoD 中创建它
bool VehicleTwoD::compareByArea(const VehicleTwoD &a,const VehicleTwoD &b)
{
return a.getArea() < b.getArea();
}
但问题是 VehicleTwoD 没有函数 getArea,它们位于 child。我应该如何得到这个修复。谢谢..
感谢帮助:
我尝试了以下
template<typename T> bool compareByArea(const T &a, const T &b) {
return a.getArea() < b.getArea();
}
我也在.h文件中声明它,
public:
template<typename T>
bool compareByArea(const T,const T);
virtual double getArea();
然后在我的 main.cpp 我试过了
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),sortVector[0].compareArea);
它给了我一个错误
sortVector.std::vector<_TP, _ALLOC ....... 中的成员 compareByArea 的错误请求是非类类型“VehicleTwoD*”
如果我这样做
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),sortVector[0].compareArea);
我会得到错误 compareByArea 没有在这个范围内声明。
我该怎么办?我在包含在 main.cpp 中的 VehicleTwoD 声明了 compareByArea
VehicleTwoD 是父类,我也是 virtual double getArea() 所以当它调用 getArea 时,它将使用子 getArea 代替,因为私有变量 - area 在 child 并且函数 getArea() return area 也在 child
我该怎么办..困惑和卡住。谢谢!
最新更新再次:
我正在尝试通过 compareByArea 对向量进行排序,其中较小的区域将在最高处排序,而较大的 1 将在底部。
问题是 getArea 是 Car & Lorry (子类)的函数,我在 main.cpp 创建了这个 compareByArea
sortVector 是 vehicletwod 的向量副本
我为我的车辆设定价值的方式是这样的..
if(vehicleType=="Car")
{
vehicletwod[arrayCount] = new Car();
vehicletwod[arrayCount].setDimension();
//set area
vehicletwod[arrayCount].setArea();
cout << "Done setting the data";
}
我如何实现按区域升序排序。
我在 main.cpp 创建了这个函数
template<typename T> bool compareByArea(const T &a, const T &b) {
return a.getArea() < b.getArea();
}
然后我做了这个
sortVector.assign(vehicletwod, vehicletwod + arrayCounter);
sort(sortVector.begin(),sortVector.end(),compareByArea);
编译错误: 编译错误:
no matching function for call to 'sort(std::vector<VehicleTwoD*>::iterator, std::vector<VehicleTwoD*>::iterator, <unresolved overloaded function type>)'
note: template<class _RAIter> void std::sort (_RAIter, _RAIter)
note: template<class _RAIter, class _Compare> void std::sort(_RAiter, _RAIter, _Compare)
谢谢
我有一个新的编译错误
error: passing 'const VehicleTwoD' as 'this' argument of 'virtual double VehicleTwoD::getArea()' discards qualifers.
error: passing 'const VehicleTwoD' as 'this' argument of 'virtual double VehicleTwoD::getArea()' discards qualifers.
关于我的 getArea 是这样的
//在父母是这样的
double VehicleTwoD::getArea()
{
double area;
area=0.00;
return area;
}
汽车 - 孩子是
double Car::getArea()
{
return area;
}