10

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

感谢您的帮助。

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);
    }
}
4

2 回答 2

16

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

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

temp->next

不编译。

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

于 2013-02-25T14:23:09.313 回答
5

你应该替换这一行:

temp = temp->next;

用那一行:

temp = nodeGetNextNode(temp);

原因是在这段代码中你对node. 我想这就是为什么你使用nodeGetNextNodetemp2 的函数。您也只需要将它用于温度。

于 2013-02-25T14:29:40.367 回答