Forum: Compiler & IDEs Problem bei der Übergabe von Zeigern auf eine struct


von Michael M. (moonuser)


Lesenswert?

Hallo,

ich versuche einen Zeiger auf eine struct an eine Funktion zu übergeben.
(Code exemplarisch)
typedef struct{
  uint8_t Sekunde;
  uint8_t Minute;
  uint8_t Stunde;
  uint8_t Tag;
  uint8_t Tag_der_Woche;
  uint8_t Monat;
  uint8_t Jahr;
}ZEIT;

int main(void)
{
ZEIT CTime;

Timecount((ZEIT*) &CTime);
}

void(Timecount(ZEIT*time)
{
*time.Sekunde++;
}

Ich kann in der Funktion allerdings nicht auf die Elemente der Struct 
zugreifen.
Fehlermeldung:
../Funkuhr.c:82: error: request for member 'Sekunde' in something not a 
structure or union

Was mache ich falsch?
Schon mal Danke

Grüße

von yalu (Gast)


Lesenswert?

1
*time.Sekunde++;

ist falsch, da '.' stärker bindet als '*'. Richtig ist
1
(*time).Sekunde++;

oder äquivalent dazu (und genau dafür gibt es diese Schreibweise)
1
time->Sekunde++;

Der Type-Cast in
1
Timecount((ZEIT*) &CTime);

ist übrigens überflüssig. Besser:
1
Timecount(&CTime);

Da Type-Casts Fehlerquellen sind, sollten
sie nur dort eingesetzt werden, wo kein anderer Weg daran vorbei
führt.

von Michael M. (moonuser)


Lesenswert?

Hallo,
leider gibt es wieder nur Fehler:
yalu wrote:

>
>
1
> (*time).Sekunde++;
2
>
>
Fehlermeldung wie vorher:
../Funkuhr.c:84: error: request for member 'Sekunde' in something not a 
structure or union

> oder äquivalent dazu (und genau dafür gibt es diese Schreibweise)
>
>
1
> time->Sekunde++;
2
>
>
ist gleichbedeutend, aber leider ../Funkuhr.c:84: error: request for 
member 'Sekunde' in something not a structure or union

> Der Type-Cast in
>
>
1
> Timecount((ZEIT*) &CTime);
2
>
>
> ist übrigens überflüssig. Besser:
>
>
1
> Timecount(&CTime);
2
>
>
> Da Type-Casts Fehlerquellen sind, sollten
> sie nur dort eingesetzt werden, wo kein anderer Weg daran vorbei
> führt.
Das sehe ich ein. Ich habe CTime auch ohne Cast übergeben wollen, aber 
ich erhalte eine Warnung, wo ich mir über die Folgen nicht ganz im 
klaren bin:
../Funkuhr.c:70: warning: passing argument 1 of 'Timecount' discards 
qualifiers from pointer target type

Fehlt noch irgend ein Include oder ??? damit Pointer auf structs als 
solche verarbeitet werden? Ist bei der def der struct ein Fehler?

Danke!

von Michael M. (moonuser)


Lesenswert?

Hallo,

sorry hatte mich in der Zeile vertan.

Beide varianten
1
(*time).sekunde++;
1
time->sekunde++;

arbeiten.


Danke!!

Grüße
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.