Günaydın topluluğundaki bir işlevi nasıl çağırılır. Ben SimVehicleParticularC++
adlandırılan bu başlık dosyasını, varenter code here
#ifndef _simVehicleParticular_h_
#define _simVehicleParticular_h_
#include "A2BehavioralModelUtil.h"
#include "A2SimVehicle.h"
class A2BEHAVIORALEXPORT simVehicleParticular: public A2SimVehicle
{
private:
float newAttribute;
public:
simVehicleParticular (void *handlerVehicle, unsigned short idhandler,bool isFictitiousVeh);
~ simVehicleParticular();
const float getnewAttribute() const;
void setnewAttribute (float avalue);
};
#endif
Ben de A2SimVehicle denir başka başlık ve bunun bir parçası olan
içermektedir:
bununenter code here
#ifndef _A2SimVehicle_h_
#define _A2SimVehicle_h_
#include "A2BehavioralModelUtil.h"
typedef A2BEHAVIORALEXPORT struct yieldInfo{
double distance2ConfVehiclePrio;
double distance2ConfVehicleGiveWay;
bool isVehiclePrioWithinVisibility;
bool isVehiclePrioRealAndReachingConflict;
bool isVehicleGiveWayComingNext;
bool isVehiclePrioAfectedByStop;
bool isVehiclePrioAfectedByYellowBox;
bool isVehiclePrioAfectedByGiveWay;
bool isVehiclePrioPrioritaryBasedOnWaitingTime;
bool isVehiclePrioComingNext;
bool isVehiclePrioLeaderOfVehicleGiveWay;
double passingTimeVehiclePrio;
double leavingTimeVehiclePrio;
double passingTimeVehicleGiveWay;
double leavingTimeVehicleGiveWay;
double safetyMargin;
} yieldInfo;
enter code here
class A2BEHAVIORALEXPORT A2SimVehicle
{
public:
A2SimVehicle(void *handlerVehicle, unsigned short idhandler, bool isFictitiousVeh);
virtual ~A2SimVehicle();
/*!
Internal function to be used only by the microsimulator
*/
void setHandlerVehicle(void *handlerVehicle);
void * getHandlerVehicle() {return handlerVehicle;};
Bir üye en olduğunu bulunuyor:
Şimdi, kaynak dosya söz konusu olduğunda, şöyle bir işlev çağırmak istiyorum:
Ben koyduğunuzda, Ancakdouble accelcurrent = getIDMDeceleration((simVehicleParticular *)vehicle, (A2SimVehicle *)vehicle->getRealLeader(temp));
:
enter code here
double behavioralModelParticular::getIDMDeceleration(simVehicleParticular *vehicle, simVehicleParticular *leader)
{
//int id = vehicle->getId();
//int idl = leader->getId();
double Shift;
Shift = 0;
double ShiftLeader;
ShiftLeader = 0;
simVehicleParticular *tempVeh;
int idT;
double a = vehicle->getAcceleration();
double b = vehicle->getDeceleration();
double VelAnterior, PosAnterior, VelAnteriorLeader, PosAnteriorLeader;
double GapAnterior = vehicle->getGap(Shift, leader, ShiftLeader, PosAnterior, VelAnterior, PosAnteriorLeader, VelAnteriorLeader);
double DesiredGap = getIDMMinimumGap(vehicle, leader, VelAnterior, VelAnteriorLeader, GapAnterior);
double X = VelAnterior/vehicle->getFreeFlowSpeed();
double acceleration = max(b, a*(1 - pow(X, 4) - (DesiredGap/GapAnterior)*(DesiredGap/GapAnterior)));
return acceleration;
}
Sorum Böyle bu işlevi çağırmak istiyorum yani,
(A2SimVehicle *)vehicle->getRealLeader(temp))
bir uyarı diyor ki görünür:
hata : "A2SimVehicle" türünün argümanı, "SimVehicleParticular" türünde parametreyle uyumsuz.
Bu işlevi, yukarıda anlattığım üstbilgileri doğru bir şekilde nasıl arayacağımı söyler misiniz? Herhangi bir yardım, derinden takdir edilecek.
Teşekkür ederiz!
Ben fonksiyonu değişmiş: Ben de soldouble behavioralModelParticular::getIDMDeceleration(simVehicleParticular*vehicle, A2SimVehicle*leader). However , now a line inside the function doesn't reognize the leader.
double DesiredGap = getIDMMinimumGap(vehicle, leader, VelAnterior, VelAnteriorLeader, GapAnterior);
:
double accelcurrent = getIDMDeceleration((simVehicleParticular *)vehicle, (A2SimVehicle *)vehicle->getRealLeader(temp)); the same. What happens now?
'* A2SimVehicle' için 'getRealLeader' sonucunu döküm noktası zaten hangi işlevi döner olduğunda, ne? Parametre 'simVehicleParticular *' olduğunda daha da fazla - A2SimVehicle'den türetilen bir sınıfa işaretçi. Sonuçları getRealLeader'dan düşürmeniz gerekiyor. –
A “simVehicleParticular”, bu sınıftan türediği gibi bir tür “A2SimVehicle”. Diğer yolun gerçek olması gerekmiyor. –
@ DanMašek, bana, getRealLeader'dan gelen sonucu indirerek ne demek istediğinizi açıklayabilir misiniz? – bazooka