Problem in C mit "inkompatible Typen in Zuweisung"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
klaus
Beiträge: 102
Registriert: 09.06.2003 11:32:10

Problem in C mit "inkompatible Typen in Zuweisung"

Beitrag von klaus » 25.08.2005 09:00:21

Moin,


ich habe ein Problem in C:

Code: Alles auswählen

struct ReturnInfTermin infTermin( MYSQL_RES *result,char *standort, char *jahr){

  struct ReturnInfTermin ret;
  struct ReturnLatzeit latzeit;
...
	latzeit = latZeit( standort, jahr, ret.datum);
...     
 
  return (ret);
}

struct ReturnLatzeit latZeit(char *standort, char *jahr, char *datum){

  struct ReturnLatzeit ret;
....

  return (ret);
}

Ergibt mit gcc:

Code: Alles auswählen

libInfLat1.c: In Funktion »infTermin«:
libInfLat1.c:194: Fehler: inkompatible Typen in Zuweisung
libInfLat1.c: Auf höchster Ebene:
libInfLat1.c:209: Fehler: in Konflikt stehende Typen für »latZeit«
libInfLat1.c:194: Fehler: vorherige implizite Deklaration von »latZeit« war hier
Warum?
Meines erachtens sind die Typen richtig!?!
Bin aber auch eher Anfänger in C.

Vielen Dank
Matthas

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 25.08.2005 12:01:38

Das Problem ist die implizite Deklaration in Zeile 194. Diese kannst du leicht vermeiden, in dem du vor der Zeile 194 eine explizite Deklaration
"struct ReturnLatzeit latZeit(char *standort, char *jahr, char *datum);"
einfügst.

BTW: wenn du als Returnwert eine Structure verwendest, wird ein unnötiges memcpy durchgeführt. Ich würde diese Funktion daher ungefähr so implementieren:

Code: Alles auswählen

void latZeit(struct ReturnLatzeit& ret, char *standort, char *jahr, char *datum){ 
...
}
oder so

Code: Alles auswählen

void latZeit(struct ReturnLatzeit* pRet, char *standort, char *jahr, char *datum){ 
...
}

Gruß
gms

klaus
Beiträge: 102
Registriert: 09.06.2003 11:32:10

Danke

Beitrag von klaus » 25.08.2005 13:12:09

Vielen Dank gms,

Ich wußte nicht, dass die Reihenfolge in C eine Bedeutung hat,
eigentlich hätte ich auch selber daraufkommen koennen.


Danke
Matthias

Antworten