Probleme Modularisierung



  • Hallo,

    ich versuche einen Code zu modularisieren. Dazu habe ich eine Header Datei "zug.h" und die zwei Unterprogramme "computerzug" und "spielerzug" erzeugt. Leider funktioniert das nicht, und ich weiss nicht warum. Ich kriege als Fehlermeldung "undefined reference to 'spielerzug'" und "undefined reference to 'computerzug'". Ich benutze DEV C++ als Entwicklungsumgebung. Hier das Haupt- und die Unterprogramme:

    #include <stdio.h>
    #include <stdlib.h>
    #include <zug.h>
    #define WAIT for(;;);
    main()
    { int n, k;
    printf("n k\n");
    scanf("%d %d", &n, &k);
    int spieler;

    for(spieler=1; n; spieler = !spieler)
    {
    n = spieler ? spielerzug(n,k) : computerzug(n,k);
    printf("Streichhölzer auf dem Haufen: %d\n", n);
    }
    printf(spieler ? "Ich habe gewonnen\n" : "Du hast gewonnen\n");
    WAIT;
    }
    ________________________________________
    #include <zug.h>

    int spielerzug(int n, int k)
    {
    int anz;
    do{
    printf("Du bist am Zug!\n");
    printf("Du nimmst von Haufen: ");
    scanf("%d", &anz)
    }while(anz < 1 || anz > k);

    return n-anz;
    }
    ____________________________________________
    #include <zug.h>

    int computerzug(int n, int k)
    {
    int anz;
    anz = (n+k) % (k+1);
    printf("Ich nehme %d\n", anz ? anz : 1);
    return n - (anz ? anz : 1);
    }
    ______________________________
    zug.h:
    extern int spielerzug(int n, int k);
    extern int computerzug(int n, int k);



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum C# und .NET in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hi!
    dein compiler findet die dateien nicht. üblicherweise tut man selbstgeschriebene headerdateien mit anführungszeichen includiern tun : #include "zug.h".
    die in spitzen klammer sind üblicherweise standardbibliotheksdateien.
    und was noch wichtiger ist: in headerdateien kommen üblicherwiese nur die prototypen rein, die funktionskörper in *.c dateien.



    1. Zeile 1: main gibt einen int zurück und hat als Parameter void oder int,char**
    2. Zeile 3: Sehr sehr unüblich. Normalerweise initialisiert und inkrementiert man nur die Zählvariable, sonst nichts.
    3. Zeile 5: main muss einen Wert zurückgeben.
    4. Zeile 8-13: Du benutzt printf in spielerzug(), inkludierst jedoch nicht stdio.h
    5. Zeile 15-20: Dasselbe.

    klarkkent schrieb:

    main()
    ...
          for(spieler=1; n; spieler = !spieler)
    ...
     WAIT;
    }
    ________________________________________
    #include <zug.h>
    
    int spielerzug(int n, int k)
    {
    ...
    }
    ____________________________________________
    #include <zug.h>
    
    int computerzug(int n, int k)
    {
    ...
    }
    


  • Hallo, danke erstmal!
    Ich habe die Headerdatei auch mit Anführungszeichen eingeführt gehabt: #include "zug.h". In dem Fall waren die Fehlermeldungen die folgenden:

    [Linker error] undefined reference to 'spielerzug'
    [Linker error] undefined reference to 'computerzug'
    [Linker error] undefined reference to 'WinMain@16'
    Id returned 1 exit status

    Die Datei zug.h habe ich im selben Ordner des Projektes sowie auch in den Ordner reinkopiert, wo die Standardbibliotheken sind. Es funktioniert trotzdem nicht.
    Ich verstehe wirklich nicht, wieso es nich geht. Ich lerne gerade mit C zu programmieren und habe alles so gemacht, wie es im Buch steht.

    Danke!



  • Du hast den falschen Projekttyp ausgewählt. Erstelle ein neues Projekt, und zwar eine Win32 Console Application (Wichtig: Empty project anhaken!).

    Sind die zwei Source-Dateien in denen du die zwei Zug-Funktionen definierst Teil des Projektes?


Anmelden zum Antworten