【发布时间】:2018-04-08 07:11:21
【问题描述】:
大家早上好。
我想调用我自己的函数,它包含在一个父函数中,它将一个值插入到一个表中。
当我自己调用函数时,插值起作用。但是,当我调用同一个函数时,通过父级的 get 方法传递,程序以错误代码 -1 终止。
这是我的函数头:
class TabulatedFunction : public AbstractUnivariateFunction , public AbstractClass {
public:
TabulatedFunction();
TabulatedFunction(float ** table, InterpolatorMode mode);
virtual ~TabulatedFunction();
float calculate(float* x);
void setTabulatedValues(float ** table);
float** getTabulatedValues();
InterpolatorMode getMode();
void setMode(InterpolatorMode mode);
private:
float** tabulatedValues;
InterpolatorMode mode;
};
这里是实现
float TabulatedFunction::calculate(float* xx){
float y=0.;
float x = xx[0];
// Interpolate threw the table
switch (mode) {
case InterpolatorMode::LINEAR:
{
double diffByLow = 10000000.;
double diffByUp = -1000000.;
int iByLow = -1;
int iByUp = -1;
for(int i=0;i<sizeof(tabulatedValues[0][0]) ; i++ ){
float diff = tabulatedValues[i][0] - x;
if(fabs(diff) < diffByLow && diff < 0){
diffByLow = fabs(diff);
iByLow = i;
}
if(fabs(diff) < diffByUp && diff > 0){
iByUp = i;
diffByUp = fabs(diff);
}
}
if(iByUp == -1){
iByLow = sizeof(tabulatedValues[0][0])-2;
iByUp = sizeof(tabulatedValues[0][0])-1;
}
else if(iByLow == -1){
iByLow = 0;
iByUp = 1;
}
cout << iByLow << endl;
y = tabulatedValues[iByLow][1] +(x - tabulatedValues[iByLow][0]) *(tabulatedValues[iByUp][1] - tabulatedValues[iByLow][1])/((tabulatedValues[iByUp][0] - tabulatedValues[iByLow][0]));
}break;
case InterpolatorMode::TRIGONOMETRIC:
{
y=0.;
}break;
default:{
y=0.;
}break;
}
return y;
}
然后,将函数声明到我的父级中:
class TabulatedDynamicsModel : public AbstractDynamicsModel {
public:
TabulatedDynamicsModel();
virtual ~TabulatedDynamicsModel();
void setThrustVsSpeedFunction(TabulatedFunction* thrustVsSpeedFunction);
TabulatedFunction* getThrustVsSpeedFunction();
TabulatedFunction* getAttitudeFunction();
void setAttitudeFunction(TabulatedFunction* attitude);
private:
TabulatedFunction thrustVsSpeedFunction;
TabulatedFunction attitude;
};
谢谢。
【问题讨论】:
-
代码太多了,但我没有看到任何
get方法。将您的问题简化为重现问题并发布的最小示例。 -
您说代码在您以一种方式调用时有效,但在您以另一种方式调用时崩溃。但是您根本没有显示任何调用您的函数的代码。如图所示,您的代码中唯一明显的问题是
sizeof被严重滥用。
标签: c++ pointers function-pointers