Undefined reference

Cruyff

Mitglied
Beim Compilieren bekomme ich folgende Fehlermeldung: undefined reference to erzeuge_intarray jedoch wird dies in der Header und in der intarray.c doch referenziert ... wenn ich alles in die main datei schreibe funktioniert es ... :(

intarray.h
Code:
struct IntArray * erzeuge_intarray(int laenge);
struct IntArray
{
  int laenge;
};

intarray.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "intarray.h"

struct IntArray;

struct IntArray * erzeuge_intarray(int laenge)
{
  struct IntArray *a = (struct IntArray *)malloc(sizeof(laenge*sizeof(int));  
  a->laenge = laenge;
  return a;
}

testmain.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "intarray.h"

int main()
{  
  struct IntArray *a = erzeuge_intarray(5);
   printf("Laenge: %d",a->laenge);

  return 0;
 }

Danke im voraus!
 
Zuletzt bearbeitet:
Hallo,

erst Mal danke für die Antwort. Wenn ich versuche die intarray.c zu kompilieren bekomme ich ein neuen Fehler das die Syntax nicht stimmen soll ...

Ich kompiliere mit gcc -c intarry.c -o intarray.o




Nehm alles zurück da hat eine Klammer zu gefehlt :D
 
Zuletzt bearbeitet:
Hallo,

ich möchte nun meine Funktionen erweitern und habe ein Problem bei der Wertzuweisung.
Alle Werte werden richtig zugeordnet bis auf das erste ...
Code:
void setWert(struct IntArray *array, int index, int wert){
	*(&array+index) = wert;
	printf( "%X + %d\n", (array+index), *(&array+index));         /* Testausgabe*/
}

Ich bekomme zwar die Warnung: Zuweisung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung jedoch funktioniert es soweit bis halt auf den ersten Wert den ich setzen möchte.
 
Nicht &array+index sondern array+index. array ist ja schon ein Pointer, auf die Adresse des Pointers darfst du nicht zugreifen.

Lg
 
danke für die schnelle Antwort, jedoch ändert habe ich dennoch das Problem das der erste Wert immer noch nicht richtig ist.
 
Bei der Ausgabe hast du das auch geändert?
Wie sieht denn der Quellcode für das IntArray aus? Funtioniert da wirklich ein einfacher Arrayzugriff?

Lg
 
Also die ganze Klasse intarray ist bei mir:

Code:
#include <stdio.h>
#include <stdlib.h>
#include "intarray.h"

struct IntArray * erzeuge_intarray(int laenge){
  struct IntArray *a = malloc(sizeof(laenge*sizeof(int)));  
  a->laenge = laenge;
  return a;
}
 
void setWert(struct IntArray *array, int index, int wert){
	*(array+index) = wert;
	printf( "%X + %d\n", (array+index), *(array+index));      
}
int getWert(struct IntArray *array, int index){
	return *(array+index);
}

Der Zugriff auf ein Index ist dann:
Code:
  struct IntArray *a = erzeuge_intarray(5);
   setWert(a, 1,10);
  printf("%d\n",getWert(a, 1));
 
Ich meinte in der Headerdatei die structdefinition.
Du weist nämlich dem IntArray* einfach freien Speicherplatz für Int zu, das kann nicht richtig sein.

Lg
 
Die Headerdatei ist nur
Code:
struct IntArray
{
  int laenge;
};

struct IntArray * erzeuge_intarray(int laenge);
void setWert(struct IntArray * array, int index,int wert);
int getWert(struct IntArray * array, int index);
 
Zurück