undefined reference to...



  • Hallo,

    ich soll für die Uni ein dynamisches int-Array mit Hilfe einer Struktur erstellen.
    Ich habe meine Struktur extra in eine eigene header getan. Wenn ich nun in meiner main-Funktion auf die Funktion createArray zugreifen möchte bekomme ich die Fehlermeldung undefined reference to createArray obwohl ich meiner Meinung nach alles korrekt eingebunden habe. Suche jetzt schon seit 2 Tagen nach dem Fehler komme aber absolut nicht drauf ich hoffe ihr könnt mir helfen.

    Hier mal der entsprechende Quell-code dazu:

    intarray.h:

    #ifndef INTARRAY_H
    #define INTARRAY_H
    typedef struct IntArray{
    	int size;
    	int iarray[];
    } IntArray;
    
    struct IntArray *createArray(int size);
    #endif
    

    intarray.c:

    #include <stdio.h>
    #include <stdlib.h>
    #include "intarray.h"
    
     struct IntArray *createArray(int size){
    
    	IntArray *new;
    	new = malloc(sizeof(IntArray) + size*sizeof(int));
    
    	return new;
    }
    

    arraymain.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "intarray.h"
    
    int main(int argc, char * argv[]){
    
    	int size=0;
    	int wait=0;
    	printf("Wie lang soll das Array sein?: ");
    	scanf("%d", &size);
    	printf("test");
    
    	IntArray * my_intArray;
    	my_intArray = createArray(size);
    
    	for(int i=0; i<size;i++){	
    		fflush(stdin);		
    		printf("\nWelchen Wert auf Position %d: ", i);
    		scanf("%d",&my_intArray[i]);
    
    	}
    	for(int i=0; i<size;i++){
    		printf("Der Wert von Position %d ist %d\n",i, my_intArray[i]);
    	}
    	fflush(stdin);
    	scanf("%i", wait);
    
    }
    

    Vielen Dank schon mal im Voraus.
    lg chan



  • Am einfachsten ist: Du kompilierst erst beide Objektdateien:

    cc -std=c99 -Wall -pedantic   -c -o arraymain.o arraymain.c
    cc -std=c99 -Wall -pedantic   -c -o intarray.o intarray.c
    

    Und linkst die Objektdateien dann zu einem executable

    cc -std=c99 -Wall -pedantic -o arraymain arraymain.o intarray.o
    

  • Mod

    Oder, sofern man nur 2-3 Projektdateien hat, einfach alles in einer Zeile

    cc -Wall -std=c99 -pedantic arraymain.c intarray.c -o executable
    

    Ist eine praktische Abkürzung. Wobei Furble Wurbles Version besser auf das Übersetzen von Projekten mit sehr vielen Dateien vorbereitet und man besser sieht, was eigentlich passiert.

    PS: Wow, Code von jemandem, der an der Uni C gelernt hat und der trotzdem aussieht wie richtig gutes C? 😮 Das sieht man selten! Respekt an den Lehrer 👍
    PPS: Kleiner Mangel: fflush(stdin) ist undefiniertes Verhalten und wird auch ganz real auf vielen Plattformen (aka alles außer Windows) nicht funktionieren und eventuell sogar aktiv schaden.



  • - es gibt keine dynamischen Arrays (weißt du dass du hier FAM benutzt?)
    - fflush(stdin) benutzen nur Deppen
    - du benutzt sowohl 'struct IntArray' als auch 'IntArray'
    - free fehlt
    - Zeile 26 ist Müll

    obwohl ich meiner Meinung nach alles korrekt eingebunden habe

    Binde intarray.c dort in das Projekt ein, wo auch arraymain.c steht.



  • Erstmal vielen Dank an euch für die vielen Antworten 🙂

    An SeppJ und Fuble Wurble habe es probiert so zu kompilieren aber das gab noch mehr Fehlermeldungen... 😕

    Am Ende hat es wirklich geholfen intarray.c nochmal in arraymain einzubinden

    d.h. es läuft in diesem Zustand

    -> Danke an Wutz 🙂 👍

    Deine Stichpunkte werfen alledings noch Fragen auf:

    es gibt keine dynamischen Arrays (weißt du dass du hier FAM benutzt?)

    Was meinst du mit FAM ?
    hab gegoogelt aber nix brauchbares gefunden 😕

    fflush(stdin) benutzen nur Deppen

    was wäre denn besser zu nutzen ?

    du benutzt sowohl 'struct IntArray' als auch 'IntArray'

    An welcher Stelle sollte ich etwas ändern?

    free fehlt

    bau ich gleich ein Danke 🙂

    Zeile 26...

    ohne Worte... 😃
    noch aus den Zeiten nachdem sich das Konsolenfenster gleich wieder geschlossen hatte



  • chando schrieb:

    Am Ende hat es wirklich geholfen intarray.c nochmal in arraymain einzubinden

    Das war aber nicht gemeint.

    chando schrieb:

    Was meinst du mit FAM ?
    hab gegoogelt aber nix brauchbares gefunden 😕

    flexible array member

    chando schrieb:

    fflush(stdin) benutzen nur Deppen

    was wäre denn besser zu nutzen ?

    Standardkonforme Sachen.
    Z.B.: https://www.c-plusplus.net/forum/p1146014#1146014

    chando schrieb:

    Zeile 26...

    ohne Worte... 😃
    noch aus den Zeiten nachdem sich das Konsolenfenster gleich wieder geschlossen hatte

    Weißt du denn was falsch daran ist?



  • Wutz schrieb:

    Binde intarray.c dort in das Projekt ein, wo auch arraymain.c steht.

    Damit war gemeint, dass du in deiner Projektverwaltung alle .c Module einträgst.
    #include "*.c" machen ebenfalls nur Deppen.



  • SeppJ schrieb:

    Respekt an den Lehrer

    Das Lob solltest du überdenken, er setzt FAM ein ohne es zu kennen.


  • Mod

    Wutz schrieb:

    SeppJ schrieb:

    Respekt an den Lehrer

    Das Lob solltest du überdenken, er setzt FAM ein ohne es zu kennen.

    Oder er kennt diese selten benutzte Abkürzung nicht? An sich ist das ja eine recht fortgeschrittene Technik, die den typischen C-Lehrer eher zum Staunen bringen dürfte. Da kommt man wohl auch kaum von alleine drauf.


Anmelden zum Antworten