不允许指向不完整类类型的指针

时间:2013-02-25 14:19:34

标签: c

我正在实现一个冒泡排序功能,它会对单词进行排序。交换功能字很好,但我无法得到错误。尝试在线搜索,但无法获得有用的东西。我已经标记了我得到错误的地方。

感谢您的帮助。

void sortWord (struct node** head) {
    struct node* temp  = (*head);
    struct node* temp2 = (*head);

    int i;
    int j;
    int counter = 0;
    while(temp != NULL)
    {
        temp = temp->next; //<-- this is where i get the error.
        counter++;
    }
    for( i = 1; i<counter; i++)
    {
        temp2=(*head);
        for(j = 1; j<counter-1;j++)
        {
            if(wordCompare(temp2,nodeGetNextNode(temp2))>0)
            {
                swap(head,temp2,nodeGetNextNode(temp2));
                continue;
            }
        }
        temp2 = nodeGetNextNode(temp2);
    }
}

2 个答案:

答案 0 :(得分:12)

当您尝试使用已向前声明但未已定义struct时,会出现此错误。虽然向这些结构声明和操作指针是绝对可以的,但尝试取消引用它们并不行,因为编译器需要知道它们的大小和布局才能执行访问。

具体来说,在您的情况下,编译器不知道struct nodenext,所以

temp->next

无法编译。

您需要在编译单元中包含struct node的定义,您可以在其中定义sortWord函数来解决此问题。

答案 1 :(得分:4)

你应该替换这一行:

temp = temp->next;

用那一行:

temp = nodeGetNextNode(temp);

原因是在这段代码中你对node的结构一无所知。我想这就是你为temp2使用nodeGetNextNode函数的原因。你只需要将它用于温度。