Fehlermeldung beim kompilieren



  • Huhu,

    folgendes Programm will ich kompilieren und bekomme diese Fehlermeldung:

    [Linker error] undefined reference to `WinMain@16'

    Ich weiß nicht wie ich das umgehen kann... als Compiler benutze ich Dev C++

    #include <stdio.h>
    #include <stdlib.h>
    
    char passwort[] = { "gizmo" };
    
    int pwcheck (char string[])
    {
        int i;
        for (i=0 ; string[i] != '\0' ; i++)
        {
            if (string[i] != passwort[i])
            {
                          return 0; //falsches PW
            }
            else
            {
                return 1; //PW richtig
            }
    }
    
    int main (void)
    {
        char name[20];
        char pweingabe[20];
        int check;
    
        printf ("--- Login ---\n");
        printf ("Name: ");
        fgets (name,20,stdin);
        printf ("Passwort: ");
        fgets (pweingabe,20,stdin);
    
        //PW vergleichen
        check = pwcheck (pweingabe);
        if (check == 1)
        {
                  printf ("Passwort akzeptiert");
        }
        else
        {
            printf ("Falsches Passwort");
        }
    }
    
        getchar ();
        return 0;
    }
    


  • Haimi schrieb:

    folgendes Programm will ich kompilieren und bekomme diese Fehlermeldung:

    [Linker error] undefined reference to `WinMain@16'

    Das glaub ich dir nicht so recht, weil du ein Choas mit den geschwungenen Klammern hast. Deshalb sollte der Linker eigentlich gar nicht erst zu Wort kommen.

    Wenn das Programm dann durch den Compiler geht, bist einer MS-Erfindung aufgesessen, nämlich dass der Einsprungspunkt für Windows-Programme anders heisst als üblich. Dagegen hilft meistens, das Ding als "Konsolenanwendung" oder so zu bezeichnen. Ausserdem solltest du das lesen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html

    Eigentlich kein C-Problem, deshalb das falsche Forum. Abwarten und Tee trinken, man darf gespannt sein, welches das richtige ist.
    🙂



  • erstmal würd ich z.45,46,47 entfernen...

    heißt die main() unter windows nicht _tmain() oder ist das nur unter vc++ so 😕

    lg lolo



  • noobLolo schrieb:

    erstmal würd ich z.45,46,47 entfernen...

    oder z.43 :p



  • Weil wir hier doch gerne über C reden:

    Haimi schrieb:

    for (i=0 ; string[i] != '\0' ; i++)
        {
            if (string[i] != passwort[i])
            {
                          return 0; //falsches PW
            }
            else
            {
                return 1; //PW richtig
            }
        } // <-- von mir
    

    Das geht auch kürzer:

    for (i=0 ; string[i] != '\0' ; i++)
            return string[i] == passwort[i];
    

    Da fällt noch deutlicher auf, dass da irgendwas nicht stimmt, weil das nämlich eine Schleife ist, aus der immer beim ersten Durchlauf rausgesprungen wird.
    🙂



  • Was die Zeilenlöschung angeht...eigentlich wäre es sinnvoller, Zeile 43 zwischen Zeile 18 und 19 zu verschieben. So, wie's jetzt da steht, ist main eine lokale Funktion innerhalb pwchecks. Das ist auch der Grund für den Linkerfehler.



  • vielen Dank 🙂

    Ich habe jetzt die fehlende geschweifte Klammer in der Funktion hinzugefügt und die schließende Klammer für die Main-Funktion an die richtige Stelle gerückt, jetzt funzt es 🙂



  • Haimi schrieb:

    jetzt funzt es 🙂

    Sollte es aber nicht. Versuch's so:

    #include <string.h>
    
    char passwort[] = { "gizmo" };
    
    inline int pwcheck (char string[])
    {
        return strcmp(passwort, string) == 0;
    }
    

    Oder so ähnlich.
    🙂





  • rüdiger schrieb:

    Dev C++ ist veraltet und fehlerhaft.

    Doppelt hält besser.
    🙂


Log in to reply