早上好社区。我确实有这个头文件,它被称为SimVehicleParticular如何在C++中调用函数
enter 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
我也有被称为A2SimVehicle另一头和它的部分包括:
enter 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;};
一个它的成员是:
enter code here
A2SimVehicle * getRealLeader(double &Shift) const;
现在就源文件而言,我想调用一个函数,如下所示:
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;
}
我的问题是,我想调用这个函数是这样的:
double accelcurrent = getIDMDeceleration((simVehicleParticular *)vehicle, (A2SimVehicle *)vehicle->getRealLeader(temp));
然而,当我把:
(A2SimVehicle *)vehicle->getRealLeader(temp))
会出现一个警告它说:
错误:“A2SimVehicle”类型的参数与 “SimVehicleParticular”类型的参数不兼容。
你能告诉我如何正确地结合上面描述的头文件来调用这个函数吗?任何帮助将深受赞赏。
谢谢!
我改变了功能:
double 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?
什么是铸造'getRealLeader'的结果'A2SimVehicle *'点,当这已经是函数返回的是什么?甚至当参数是'simVehicleParticular *'时 - 一个指向从'A2SimVehicle'派生的类的指针。你需要从'getRealLeader'下翻结果。 –
'simVehicleParticular'是一种'A2SimVehicle',因为它来源于该类。反过来也不一定是真的。 –
@DanMašek,你可以向我解释一下getRealLeader的结果是什么意思。 – bazooka