Wie kann ich error c2440 beheben
-
Guten Tag,
Ich beschäftige mich seit kurzem mit C und bin im meinem Buch nun bei Dynamisch verketteten Listen angekommen.
Dort ist ein Codebeispiel. Wenn ich es compilieren möchte kommt die Fehlermeldung:
*error C2440: '=': 'void ' kann nicht in 'angestellt ' konvertiert werden
1> Konvertierung von 'void' in Zeiger auf nicht-'void' erfordert eine explizite Typumwandlung Zeile 44/78Hat jemand eine Idee wie ich das beheben kann?
/* linear_list1.c */ #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 20 struct datum { int tag; int monat; int jahr; }; struct angestellt { char name[MAX]; char vorname[MAX]; struct datum alter; struct datum eingest; long gehalt; struct angestellt *next; }; struct angestellt *next = NULL; struct angestellt *anfang=NULL; /* Wir hängen einen Datensatz an oder geben einen neuen ein: * n=name,v=vornam,at=alter.tage,am=alter.monat,aj=alter.jahr * eint=eigestellt tag,einm=eingestellt monat,einj=eingest. * Jahr g=gehalt */ void anhaengen(char *n, char *v, int at, int am, int aj, int eint, int einm, int einj, long g) { /* Zeiger zum Zugriff auf die einzelnen Elemente * der Struktur*/ struct angestellt *zeiger; /* Wir fragen ab, ob es schon ein Element in der Liste * gibt. Wir suchen das Element, auf das unser Zeiger * *anfang zeigt. Falls *anfang immer noch auf NULL zeigt, * bekommt *anfang die Adresse unseres 1. Elements und ist * somit der Kopf (Anfang) unserer Liste. */ if(anfang == NULL) { /* Wir reservieren Speicherplatz für unsere Struktur * für das erste Element der Liste. */ if((anfang = malloc(sizeof(struct angestellt))) == NULL) { fprintf(stderr, "Kein Speicherplatz vorhanden " "fuer anfang\n"); return; } strcpy(anfang->name, n); strcpy(anfang->vorname, v); anfang->alter.tag = at; anfang->alter.monat = am; anfang->alter.jahr = aj; anfang->eingest.tag = eint; anfang->eingest.monat = einm; anfang->eingest.jahr = einj; anfang->gehalt = g; /* Somit haben wir unseren Anfang der Liste. Von nun an * zeigt der Zeiger anfang immer auf das Element vor ihm. * Da dies aber jetzt das 1. Element der Liste war, zeigt * der Zeiger anfang auf den Zeiger next. next zeigt am * Ende immer wieder NULL. */ anfang->next=NULL; } /* Es scheint schon mindestens ein Element in der Liste * vorhanden zu sein, da der Anfang nicht == NULL ist. * Jetzt suchen wir so lange nach dem nächsten Element, * bis der *next-Zeiger auf NULL zeigt. Somit haben wir * das Ende der Liste gefunden und können einen neuen * Datensatz anhängen. */ else { zeiger=anfang; /* Wir zeigen auf das 1. Element. */ while(zeiger->next != NULL) zeiger=zeiger->next; /* Wir reservieren einen Speicherplatz für das letzte * Element der Liste und hängen es an. */ if((zeiger->next = malloc(sizeof(struct angestellt))) == NULL) { fprintf(stderr,"Kein Speicherplatz fuer das " "letzte Element\n"); return; } zeiger=zeiger->next; /* zeiger auf neuen Speicherplatz */ strcpy(zeiger->name,n); strcpy(zeiger->vorname,v); zeiger->alter.tag=at; zeiger->alter.monat=am; zeiger->alter.jahr=aj; zeiger->eingest.tag=eint; zeiger->eingest.monat=einm; zeiger->eingest.jahr=einj; /* Wir terminieren wieder unsere Datenstruktur. */ zeiger->gehalt=g; zeiger->next=NULL; } } /* Funktion zur Eingabe der Daten */ void eingabe(void) { char nam[MAX],vorn[MAX]; int atag,amon,ajahr,eintag,einmon,einjahr; long gehalt; printf("Name........................: "); fgets(nam, MAX, stdin); printf("Vorname.....................: "); fgets(vorn, MAX, stdin); printf("Alter...........(tt.mm.jjjj): "); scanf("%2d.%2d.%4d",&atag,&amon,&ajahr); printf("Eingestellt am..(tt.mm.jjjj): "); scanf("%2d.%2d.%4d",&eintag,&einmon,&einjahr); printf("Monatsgehalt................: "); scanf("%ld",&gehalt); getchar(); /* eingegebenen Datensatz hinten anhängen */ anhaengen(nam, vorn, atag, amon, ajahr, eintag, einmon, einjahr, gehalt); } int main(void) { while(1) eingabe(); return EXIT_SUCCESS; }
-
Du nutzt den C++-Modus von deinem Compiler.
Stelle ihn auf C um.Wie, hängt vom Compiler/IDE ab. Irgendwo in den Projekteigenschaften.
-
Dankeschön