error C2064: term does not evaluate to a function,该怎么解决
error C2064: term does not evaluate to a function
请大家帮我看下这段C代码中有什么错,找了好久。。在线等。。
int sad(int k,char *p1,int l,char *p2)
{
char *block1;
block1=new char[256];
char *block2;
block2=new char[256];
block1=Bmpdivision(k,p1);
block2=Bmpdivision(l,p2);
int sad=0;
for(int i=0;i<256;i++)
{
int c=block1[i]-block2[i];
sad+=c;
}
return sad;
}
int *vmode9(char *p1,char *p2,int r)
{
int sad1=sad(r,p2,r-321,p1);
int sad2=sad(r,p2,r-320,p1);
int sad3=sad(r,p2,r-319,p1);
int sad4=sad(r,p2,r-1,p1);
int sad5=sad(r,p2,r,p1);
int sad6=sad(r,p2,r+1,p1);
int sad7=sad(r,p2,r+319,p1);
int sad8=sad(r,p2,r+320,p1);
int sad9=sad(r,p2,r+321,p1);
int sadmin=sad1;
int sad[9];
sad[0]=sad1;
sad[1]=sad2;
sad[2]=sad3;
sad[3]=sad4;
sad[4]=sad5;
sad[5]=sad6;
sad[6]=sad7;
sad[7]=sad8;
sad[8]=sad9;
for(int i=0;i<8;i++)
{
if (sad[i+1]<sadmin)
sadmin=sad[i+1];
}
if(sadmin==sad1)
{
int sad10=sad(r,p2,r-322,p1);
int sad11=sad(r,p2,r-641,p1);
if(sad10<sad11)
vmodelin(r,p2,r-322,p1);
else
vmodelin(r,p2,r-641,p1);
}
else if(sadmin==sad2)
{
int sad12=sad(r,p2,r-640,p1);
int sad13=sad(r,p2,r-960,p1);
if(sad12<sad13)
vmodelin(r,p2,r-640,p1);
else
vmodelin(r,p2,r-960,p1);
}
else if(sadmin==sad3)
{
int sad14=sad(r,p2,r-318,p1);
int sad15=sad(r,p2,r-639,p1);
if(sad14<sad15)
vmodelin(r,p2,r-318,p1);
else
vmodelin(r,p2,r-639,p1);
}
else if(sadmin==sad4)
{
int sad16=sad(r,p2,r-2,p1);
int sad17=sad(r,p2,r-3,p1);
if(sad16<sad17)
vmodelin(r,p2,r-2,p1);
else
vmodelin(r,p2,r-3,p1);
}
else if (sadmin==sad5)
vxy(i,i);
else if (sadmin==sad6)
{
int sad18=sad(r,p2,r+2,p1);
int sad19=sad(r,p2,r+3,p1);
if(sad18<sad19)
vmodelin(r,p2,r+2,p1);
else
vmodelin(r,p2,r+3,p1);
}
else if(sadmin==sad7)
{
int sad20=sad(r,p2,r+318,p1);
int sad21=sad(r,p2,r+639,p1);
if(sad20<sad21)
vmodelin(r,p2,r+318,p1);
else
vmodelin(r,p2,r+639,p1);
}
else if(sadmin==sad8)
{
int sad22=sad(r,p2,r+640,p1);
int sad23=sad(r,p2,r+960,p1);
if(sad22<sad23)
vmodelin(r,p2,r+640,p1);
else
vmodelin(r,p2,r+960,p1);
}
if (sadmin==sad9)
{
int sad24=sad(r,p2,r+621,p1);
int sad25=sad(r,p2,r+322,p1);
if(sad24<sad25)
vmodelin(r,p2,r+621,p1);
else
vmodelin(r,p2,r+322,p1);
}
}
vmode9这个函数返回的是个一维指针,通过vxy这个调用函数实现,只有条件匹配符合sadmin==5时才会中止,否则调用vmodelin这个函数。编译问题出现在从int sad10=sad(r,p2,r-322,p1);及后面的sad11、sad12......等定义赋值语句中,问题显示为error C2064: term does not evaluate to a function。请各位大大看看吧
------最佳解决方案--------------------
vmode9 内部的数组变量 int sad[9],覆盖了全局函数 sad,后面对于 sad 的解析都理解为数组了,所以 sad(...) 的用法导致错误,给数组换个名字就行了,比如 int sads[9];
------其他解决方案--------------------
注意int sad(int k,char *p1,int l,char *p2)和int sad[9];
请不要用相同的名称。
请大家帮我看下这段C代码中有什么错,找了好久。。在线等。。
int sad(int k,char *p1,int l,char *p2)
{
char *block1;
block1=new char[256];
char *block2;
block2=new char[256];
block1=Bmpdivision(k,p1);
block2=Bmpdivision(l,p2);
int sad=0;
for(int i=0;i<256;i++)
{
int c=block1[i]-block2[i];
sad+=c;
}
return sad;
}
int *vmode9(char *p1,char *p2,int r)
{
int sad1=sad(r,p2,r-321,p1);
int sad2=sad(r,p2,r-320,p1);
int sad3=sad(r,p2,r-319,p1);
int sad4=sad(r,p2,r-1,p1);
int sad5=sad(r,p2,r,p1);
int sad6=sad(r,p2,r+1,p1);
int sad7=sad(r,p2,r+319,p1);
int sad8=sad(r,p2,r+320,p1);
int sad9=sad(r,p2,r+321,p1);
int sadmin=sad1;
int sad[9];
sad[0]=sad1;
sad[1]=sad2;
sad[2]=sad3;
sad[3]=sad4;
sad[4]=sad5;
sad[5]=sad6;
sad[6]=sad7;
sad[7]=sad8;
sad[8]=sad9;
for(int i=0;i<8;i++)
{
if (sad[i+1]<sadmin)
sadmin=sad[i+1];
}
if(sadmin==sad1)
{
int sad10=sad(r,p2,r-322,p1);
int sad11=sad(r,p2,r-641,p1);
if(sad10<sad11)
vmodelin(r,p2,r-322,p1);
else
vmodelin(r,p2,r-641,p1);
}
else if(sadmin==sad2)
{
int sad12=sad(r,p2,r-640,p1);
int sad13=sad(r,p2,r-960,p1);
if(sad12<sad13)
vmodelin(r,p2,r-640,p1);
else
vmodelin(r,p2,r-960,p1);
}
else if(sadmin==sad3)
{
int sad14=sad(r,p2,r-318,p1);
int sad15=sad(r,p2,r-639,p1);
if(sad14<sad15)
vmodelin(r,p2,r-318,p1);
else
vmodelin(r,p2,r-639,p1);
}
else if(sadmin==sad4)
{
int sad16=sad(r,p2,r-2,p1);
int sad17=sad(r,p2,r-3,p1);
if(sad16<sad17)
vmodelin(r,p2,r-2,p1);
else
vmodelin(r,p2,r-3,p1);
}
else if (sadmin==sad5)
vxy(i,i);
else if (sadmin==sad6)
{
int sad18=sad(r,p2,r+2,p1);
int sad19=sad(r,p2,r+3,p1);
if(sad18<sad19)
vmodelin(r,p2,r+2,p1);
else
vmodelin(r,p2,r+3,p1);
}
else if(sadmin==sad7)
{
int sad20=sad(r,p2,r+318,p1);
int sad21=sad(r,p2,r+639,p1);
if(sad20<sad21)
vmodelin(r,p2,r+318,p1);
else
vmodelin(r,p2,r+639,p1);
}
else if(sadmin==sad8)
{
int sad22=sad(r,p2,r+640,p1);
int sad23=sad(r,p2,r+960,p1);
if(sad22<sad23)
vmodelin(r,p2,r+640,p1);
else
vmodelin(r,p2,r+960,p1);
}
if (sadmin==sad9)
{
int sad24=sad(r,p2,r+621,p1);
int sad25=sad(r,p2,r+322,p1);
if(sad24<sad25)
vmodelin(r,p2,r+621,p1);
else
vmodelin(r,p2,r+322,p1);
}
}
vmode9这个函数返回的是个一维指针,通过vxy这个调用函数实现,只有条件匹配符合sadmin==5时才会中止,否则调用vmodelin这个函数。编译问题出现在从int sad10=sad(r,p2,r-322,p1);及后面的sad11、sad12......等定义赋值语句中,问题显示为error C2064: term does not evaluate to a function。请各位大大看看吧
------最佳解决方案--------------------
vmode9 内部的数组变量 int sad[9],覆盖了全局函数 sad,后面对于 sad 的解析都理解为数组了,所以 sad(...) 的用法导致错误,给数组换个名字就行了,比如 int sads[9];
------其他解决方案--------------------
注意int sad(int k,char *p1,int l,char *p2)和int sad[9];
请不要用相同的名称。