Fehler bei funktionen in einer anderen Datei



  • Hallo erstmal.

    Ich bin ein blutiger Anfanger in de C welt.
    Habe aber grobe Kenntnisse in anderen Programmierungssprachen.

    Mein Problem ist, ich habe zwei Dateien. (GTI_Praktikum.c und create_minterm.c)

    habe in er main Datei einen Prototypen erstellt und will die Funktion in eine andere Datei schreiben.
    Doch irgentwie kommen da fehlermeldungen, die mir nichts sagen.

    Wäre super, wenn mir einer nicht nur den richtigen Quelltext sagen könnte.
    Sondern auch was der Fehler bedeuten soll und warum ich das falsch gemacht habe.

    Hier die GTI_Praktikum.c

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define MAX_VARIABLEN 30 
    
    typedef struct komposition 
    {
    	int entstanden_aus;
    	struct komposition *next;
    } KOMPOSITION;
    
    typedef struct minterm
    {
    	short int bit[MAX_VARIABLEN];
    	short int verwendet;
    	KOMPOSITION *komp_head;
    	struct minterm *next;
    } MINTERM;
    
    /*        Prototyp         */
    MINTERM *create_minterm_list_element(MINTERM);
    
    int main(void) {
    
    	printf("%d\n",MAX_VARIABLEN);
    }
    

    und hier die create_minterm

    #include"GTI_Praktikum.c"
    
    MINTERM *create_minterm_list_element(MINTERM test) {
    
    	MINTERM *neu;
    	neu = (MINTERM*)malloc(sizeof(MINTERM));
    	if(neu == NULL) {
    		printf("create_minterm_list_element: malloc failed\n");
    		exit(1);
    	} else {
    		neu->verwendet = 0;
    	}
    	neu->next = NULL;
    	return neu;
    
    }
    

    Diese Fehlermeldung bekomme ich:

    --------------------Configuration: GTI_Praktikum - Win32 Debug--------------------
    Compiling...
    create_minterm.c
    Linking...
    GTI_Praktikum.obj : error LNK2005: _main already defined in create_minterm.obj
    Debug/GTI_Praktikum.exe : fatal error LNK1169: one or more multiply defined symbols found
    Error executing link.exe.

    GTI_Praktikum.exe - 2 error(s), 0 warning(s)



  • Hallo,

    die Sache ist an sich ganz einfach: Du sollst keine *.c includen. Schon gar nicht, wenn auch noch die main drinsteht, die darf es nämlich nur einmal geben.

    Hier habe ich kürzlich gezeigt, wie das gemacht wird. Deinen Prototyp schreibst du in die Header-Datei (Include-Guards nicht vergessen), die Implementierung in die *.c Datei. Dann inkludierst du den Header in die main rein und kompilierst die beiden *.c Dateien zu einem binary.

    Ach ja, bei Unklarheiten zu Begriffen in meinem Text ➡ erst googeln, dann fragen. Danke.

    EDIT:

    Noch was zu deinen Strukturen:

    Entweder du schreibst das so:

    typedef struct 
    {
        int entstanden_aus;
        struct komposition *next;
    } komposition; 
    
    komposition k;
    

    oder so:

    struct komposition {
        int entstanden_aus;
        struct komposition *next;
    };
    
    struct komposition k;
    

    Deine Variante (also die Kombination aus beidem) ist Müll, denn du definierst einerseits einen Typ und legst gleichzeitig ein Objekt dieses Typs an.

    MfG

    GPC


Anmelden zum Antworten