我收到以下错误:左值作为赋值的左操作数 对于此功能代码:
typedef struct {
int nbIndividus;
int nbVariables;
distance_t *distancesReference;
double **target;
double *E;
double *lag;
} functionData_t;
double myfunc (unsigned n,const double *x, double *grad, void *my_func_data)
{
int i,j,k,t,ind1,ind2,a,test_nb;
double temp,sigma,eta,distanceCarre,sommeObj,distance,compteurDistance,somme,objectifFunction,Somme,*Array_val_E;
int nbIndividus,nbVariables,NbDisplacement,nb_val_E;
double **target;
double *E;
double *lag ;
distance_t *distancesReference;
functionData_t *functionData=(functionData_t *)my_func_data;
nbIndividus=functionData->nbIndividus;
nbVariables=functionData->nbVariables;
target= functionData->target;
E= functionData->E;
lag=functionData->lag;
distancesReference=functionData->distancesReference;
sommeObj=0;
somme=0;
sigma=0.13;
eta=0.5;
nb_val_E=114814;
compteurDistance=0;
NbDisplacement=0;
for(k=1;k<nbIndividus;k++){
compteurDistance=compteurDistance+(nbIndividus-k);
}
for(i=0;i<compteurDistance;i++){
ind1=distancesReference[i].i;
ind2=distancesReference[i].j;
distance=distancesReference[i].distance;
Somme=0;
for(k=0;k<nbVariables;k++) {
temp=target[ind1][k]-target[ind2][k]+x[ind1*nbVariables+k]-x[ind2*nbVariables+k];
Somme+=temp*temp;
}
distanceCarre=Somme;
for(t=0;t<=nb_val_E;t++){
Array_val_E[t]=fabs(E[t]-(distanceCarre/(4*sigma*sigma)));
}
index=min_array(Array_val_E,nb_val_E);
sommeObj+=(distancesReference[i].distance)*(distancesReference[i].distance)+distanceCarre+2*sigma*sigma*nbVariables-2*sqrt(3.14)*(distancesReference[i].distance)*sigma*val_lag(index);
}
objectifFunction=sommeObj;
return objectifFunction;
}
我认为问题出现在向量E中,但我无法找到此错误的来源。有人可以帮我解决一下吗?
感谢。
答案 0 :(得分:0)
您忘记声明index
。
显然奇怪的错误信息的原因 - “lvalue required ...”而不是像''index'unclaclared ......“ - 是有一个名为”index“的库函数你发生了包括(很可能是this one)的声明。
当你没有使用变量声明隐藏该函数时,你试图分配给一个函数(由于显而易见的原因你不能这样做)。