2017-06-01 3 views
1

Ich habe eine Linkliste der Kontakte in C erstellt. Es hat gut funktioniert. aber jetzt möchte ich eine Löschfunktion für einen angegebenen Kontakt schreiben (namentlich) Ich bekomme die Error:"dereferencing pointer to incomplete type". Hier ist mein Code:C: Dereferenzieren Zeiger auf unvollständigen Typ Fehler

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

Ich wollte wissen, warum ich diesen Fehler bekomme (trotz der Definition von Struktur Kontakt.). Vielen Dank.

+8

Wahrscheinlich, weil Sie 'struct contact' definieren, aber' temp' ist als ein Zeiger auf 'struct student' definiert. – yeputons

+0

Hallo und willkommen bei StackOverflow! Leider präsentieren Sie nicht genug Code für uns, um Ihnen bei Ihrem Problem richtig helfen zu können. Bitte lesen Sie [fragen] und aktualisieren Sie Ihre Frage mit einem [mcve]. –

Antwort

0

Ihr next Zeigertyp war contact - vorausgesetzt, das war ein Tippfehler - hier ist der korrigierte Code mit den Tippfehlern - Dies kompiliert - 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; 
} 
+0

Es tut mir leid, dass dieser Teil in Ordnung war. Ich habe einen Fehler gemacht, als ich die Fehlerzeile anzeigte. Ich habe es jetzt korrigiert. –

+0

Sie haben 'struct student * temp' definiert. Können Sie Ihre Erklärung von' student' posten? – Zakir

+0

"Struct Student" ist ein Typ selbst, ich habe es oben definiert. –

Verwandte Themen