堆排序错误:表达式必须是指向完整对象类型的指针?

时间:2013-03-17 22:52:07

标签: c++ function-call

我正在为作业实施堆排序。我们必须像她在课堂上用她的伪代码那样做,否则我们不会得到信任。

在我的Max_Heapify函数中,当我调用Left()和Right()函数时出现错误,即“ 表达式必须是指向完整对象类型的指针 ”。我直接从psedocode,所以我不知道是什么导致这个错误,任何人都可以帮助吗?

void Max_Heapify(int heapArray[],int i)
{
int n = SIZE;
int largest = 0;
int l = Left[i];//<--Error here on Left
int r = Right[i];//<--Error here on Right

if(( l <= n) && (heapArray[l] > heapArray[i]))
{
    largest = l;
}
else
{
    largest = i;
}

if( (r <= n) && ( heapArray[r] > heapArray[largest]))
{
    largest = r;
}

int temp;
if(largest != i)
{
    temp = heapArray[i];
    heapArray[i] = heapArray[largest];
    heapArray[largest] = temp;

    Max_Heapify(heapArray,largest);
}

return;
}

............................................... ............................................

如果它有帮助,这里是Left()和Right()函数

int Left(int i)
{
return (2*i);
}

int Right(int i)
{
return ((2*i)+1);
}

5 个答案:

答案 0 :(得分:2)

左和右权利是功能;您的代码使用它们就像它们是数组一样。要调用函数,请使用(),而不是[]。

答案 1 :(得分:1)

您需要Left(i)Right(i),而不是Left[i]Right[i]

答案 2 :(得分:0)

int l = Left[i];//<--Error here on Left
int r = Right[i];//<--Error here on Right

int l = Left(i);//should be
int r = Right(i);//should be

答案 3 :(得分:0)

这是一个错误,因为我们使用()来表达C ++中的函数调用。 你必须改变

int l = Left[i];

进入

int l = Left(i);

答案 4 :(得分:0)

如果你想看到最好的heapsort实现,请查看linux内核。

http://lxr.free-electrons.com/source/lib/sort.c

我记得在我刚接触C时盯着它,这样我就可以吸收完美。