Info:
Parent Class: Vehicle
Child Class : Car & Lorry
ベクトルを取得し、領域を昇順に並べ替えようとしています
sort(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にあり、ダブルエリアも子供に宣言されています。
しかし、問題は、この方法で並べ替える場合、仮想を使用してそれを達成できますか?次に、子で同じメソッドを作成しますが、それをオーバーロードして、その方法で領域を並べ替えます
それを行うためのより良い方法はありますか?
すべての助けをありがとう!
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);
//ただし、並べ替えは機能しません。
オブジェクト1のgetArea()をオブジェクト2に対してgetArea()してbool結果を返すことができるcompareAreaをどこで作成するかわかりません。
これを使ってVehicleTwoDで作成してみます
bool VehicleTwoD::compareByArea(const VehicleTwoD &a,const VehicleTwoD &b)
{
return a.getArea() < b.getArea();
}
ただし、問題は、VehicleTwoDにgetArea関数がなく、子に配置されていることです。この修正をどのように取得する必要がありますか。ありがとう..
助けてくれてありがとう:
私は以下を試しました
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は親クラスであり、仮想ダブルgetArea()でもあるため、getAreaを呼び出すと、代わりに子getAreaが使用されます。これは、プライベート変数-areaが子にあり、関数getArea()returnareaも子にあるためです。
私は何をすべきか..混乱して立ち往生しています。ありがとう!
再び最新のアップデート:
私は、compareByAreaでベクトルを並べ替えようとしています。この場合、小さい方の領域が最も高く並べ替えられ、大きい方の領域が一番下に並べ替えられます。
問題は、getAreaがCar&Lorry(子クラス)の関数であり、main.cppでこのcompareByAreaを作成することです。
sortVectorは、vehicletwodのベクターコピーです。
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;
}