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
-
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üllobwohl 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 gefundenfflush(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 gefundenflexible 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#1146014chando schrieb:
Zeile 26...
ohne Worte...
noch aus den Zeiten nachdem sich das Konsolenfenster gleich wieder geschlossen hatteWeiß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.
-
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.