显示' - >'的无效类型参数(有' int')

时间:2018-03-17 16:41:17

标签: c structure

 struct MinHeap{
int size;
int* array;
 };

 void minHeapify(struct MinHeap* minHeap, int idx)
 {
int smallest, left, right;
smallest = idx;
left = 2 * idx + 1;
right = 2 * idx + 2;

if (left < minHeap->size && minHeap->array[left]->key < minHeap-
>array[smallest]->key )
  smallest = left;

if (right < minHeap->size && minHeap->array[right]->key < minHeap-
>array[smallest]->key )
  smallest = right;

if (smallest != idx)
{
    // The nodes to be swapped in min heap
    MinHeapNode *smallestNode = minHeap->array[smallest];
    MinHeapNode *idxNode = minHeap->array[idx];

    // Swap positions
    minHeap->pos[smallestNode->v] = idx;
    minHeap->pos[idxNode->v] = smallest;

    // Swap nodes
    swapMinHeapNode(&minHeap->array[smallest], &minHeap->array[idx]);

    minHeapify(minHeap, smallest);
}
}

它显示&#39; - &gt;&#39;的无效类型参数。 (在“minheapify”功能中有&#39; int&#39;)&#39; - &gt;&#39;用来。请告诉我该怎么做,因为其他功能运作良好。

2 个答案:

答案 0 :(得分:2)

你有

minHeap->array[left]->key

其中minHeap是指向struct MinHeap的类型指针 因此minheap->访问structMinHeap的成员。 由于minHeap->array,所访问的成员为array,其类型为int的指针。
使用[left],您将该指针视为数组,这是可以的。结果是int 那么你应用下一个->应该是一个指针,但是int

这是编译器告诉你的。

答案 1 :(得分:1)

  1. minHeap->array[left]是整数值(不是指向结构的指针),因此minHeap->array[left]->key会产生编译错误。
  2. MinHeapNode *smallestNode = minHeap->array[smallest];int转换为MinHeapNode *,这可能不是int