C:取消引用指向不完整类型错误的指针

C:取消引用指向不完整类型错误的指针,c,struct,dereference,C,Struct,Dereference,我用C语言创建了一个联系人链接列表,效果很好。但是现在我想为一个指定的联系人(按姓名)编写一个delete函数,我得到了错误:“取消引用指向不完整类型的指针”。这是我的密码: struct contact { char name[100]; char number[20]; struct contact *next; }; int deleteByName(struct contact **hptr, char *name) { struct student *p

我用C语言创建了一个联系人链接列表,效果很好。但是现在我想为一个指定的联系人(按姓名)编写一个delete函数,我得到了
错误:“取消引用指向不完整类型的指针”
。这是我的密码:

struct contact
{
    char name[100];
    char number[20];
    struct contact *next;
};
int deleteByName(struct contact **hptr, char *name)
{
    struct student *prev = NULL;
    struct student *temp = *hptr;
    while (strcmp(temp->name /*The Error is Here*/ , name) != 0 && (temp->next) != NULL)
    {
        prev = temp;
        temp = temp->next; 
    }
    if (strcmp(temp->name, name) == 0)
    {
        if (prev == NULL)
            *hptr = temp->next;
        else
            prev->next = temp->next;
        free(temp);
        return 0;
    }
    printf("\nNAME '%s' WAS NOT FOUND TO BE DELETED.", name);
    return -1;
}

我想知道为什么会出现这个错误(尽管定义了struct contact.)。谢谢。

您的
下一个
指针类型是
联系人
-假设这是一个输入错误-这是已更正的代码,输入错误已修复-此编译-HTH

struct student
{
    char name[100];
    char number[20];
    struct student *next;
};

int deleteByName(struct student **hptr, char *name)
{
    struct student *prev = NULL;
    struct student *temp = *hptr;
    while (strcmp(temp->name, name) != 0 && (temp->next) != NULL)
    {
        prev = temp;
        temp = temp->next; //***No Error now***
    }
    if (strcmp(temp->name, name) == 0)
    {
        if (prev == NULL)
            *hptr = temp->next;
        else
            prev->next = temp->next;
        free(temp);
        return 0;
    }
    printf("\nNAME '%s' WAS NOT FOUND TO BE DELETED.", name);
    return -1;
}

你的
下一个
指针类型是
联系人
-假设这是一个输入错误-这是更正的代码,输入错误已修复-此编译-HTH

struct student
{
    char name[100];
    char number[20];
    struct student *next;
};

int deleteByName(struct student **hptr, char *name)
{
    struct student *prev = NULL;
    struct student *temp = *hptr;
    while (strcmp(temp->name, name) != 0 && (temp->next) != NULL)
    {
        prev = temp;
        temp = temp->next; //***No Error now***
    }
    if (strcmp(temp->name, name) == 0)
    {
        if (prev == NULL)
            *hptr = temp->next;
        else
            prev->next = temp->next;
        free(temp);
        return 0;
    }
    printf("\nNAME '%s' WAS NOT FOUND TO BE DELETED.", name);
    return -1;
}

可能是因为您定义了
struct contact
,但是
temp
被定义为指向
struct student
的指针。您好,欢迎来到StackOverflow!遗憾的是,您没有提供足够的代码让我们能够正确地帮助您解决问题。请阅读并更新您的问题。可能是因为您定义了
struct contact
,但是
temp
被定义为指向
struct student
的指针。您好,欢迎来到StackOverflow!遗憾的是,您没有提供足够的代码让我们能够正确地帮助您解决问题。请阅读并用a更新您的问题。抱歉,该部分没有问题,我在显示错误行时出错。我现在更正了。您已经定义了
struct student*temp
您可以发布
student
的声明吗?“struct student”本身就是一个类型,我在顶部定义了它。当您说
struct student*temp=*hptr
您基本上是在实例化
student
类型的指针。你需要声明'struct student',这不是我在代码顶部做的声明吗?:struct student{char name[100];char number[20];struct student*next;};对不起,那部分还可以,我在显示错误行时出错了。我现在更正了。您已经定义了
struct student*temp
您可以发布
student
的声明吗?“struct student”本身就是一个类型,我在顶部定义了它。当您说
struct student*temp=*hptr
您基本上是在实例化
student
类型的指针。你需要声明'struct student',这不是我在代码顶部做的声明吗?:struct student{char name[100];char number[20];struct student*next;};