Hilfe: Fehlermeldung: incompatible types in return



  • Hallo,
    ich bin grad dabei ein Programm zu schreiben welches die Daten von zwei Personen einliest, das Alter vergleicht und am Ende den Namen des älteren zurückgibt. Nun wollte ich das mal testen und bekomme die Fehlermeldung: incompatible types in return. Jetz würde ich gerne wissen was diese bedeutet, wie sie zustande kommt und wie ich die dann beheben kann (ich benutze wxDev fals es weiterhilft). Danke schonmal für Hilfen. 😃

    Gruß Marco

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct persdat
    {
        char nname [20];
        char vname [20];
        int alter;
        int groesse;
        int schuhgr;
    };
    
    struct persdat datensatz (struct persdat p)
    {
        printf ("Nachname der Person: \t\t");
        fgets (p.nname, 20, stdin);
        printf ("\nVorname der Person: \t\t");
        fgets (p.vname, 20, stdin);
        printf ("\nAlter der Person: \t\t");
        scanf ("%d", &p.alter);
        printf ("\nGroesse der Person (in cm): \t\t");
        scanf ("%d", &p.groesse);
        printf ("\nSchuhgroesse der Person: \t\t");
        scanf ("%d", &p.schuhgr);
    
    printf ("Daten der Person: Vorname: %s, Nachname: %s, Alter: %d, Groesse: %d, Schuhgroesse: %d \n"
            , p.vname, p.nname, p.alter, p.groesse, p.schuhgr);                     //gibt die eingegebnen Daten nochmals in voller Länge aus
    
    return p;
    
    int main(int argc, char *argv[])
    {
    
    struct persdat p1;
    struct persdat p2;
    
    datensatz (p1);
    fflush (stdin);
    datensatz (p2);
    {
    if (p.alter > p.alter)                                              // vergleicht das Alter der beiden Personen
        printf ("Die aeltere Person ist: %s %s", p.vname, p.nname);
    else
        printf ("Die aeltere Persin ist: %s %s", p.vname, p.nname);
    }
    }
    
    system("PAUSE");
    return 0;                   // hier taucht bei mir die Fehlermeldung auf
    }
    

  • Mod

    Ueberpruef nochmal alle Klammern in deinem Code! Wenn du eine vernuenftige Einrueckung benutzen wuerdest, wuerdest du den Fehler sofort sehen. Oder einen Editor, der automatisch einrueckt.

    Warum nimmt die Funktion datensatz ein struct persdat als Argument, ueberschreibt dieses komplett, gibt dann eine Kopie davon zurueck? Das ist nicht, wie Funktionen und lokale Variablen funktionieren. Mach einfach in der Funktion ein neues struct, gib eine Kopie davon zurueck. Oder nimm einen Zeiger auf ein struct als Argument und ueberschreib es. Derzeit hast du beides vermischt und es wird nicht funktionieren. (Der Aufruf der Funktion muss natuerlich noch angepasst werden, je nachdem, welche Variante du nimmst. Derzeit passt er nur zu deiner falschen Mischvariante)

    fflush (stdin); ist plattformabhaengiger Mist, der vielleicht auf einer gewissen Konsole funktioniert, aber anderswo undefiniertes Verhalten ausloest. Eine einfache Abhilfe waere, wenn du nicht fgets und scanf mischen wuerdest. scanf(" %19[^\n]", p.nname); sollte es auch tun zum Lesen des Namens (ungetestet. Achte auf das Leerzeichen im Formatstring, das ist wichtig!).


Anmelden zum Antworten