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
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.
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.