mikrocontroller.net

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


Autor: Michael Müller (moonuser)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*time.Sekunde++;

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

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

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

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

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

Autor: Michael Müller (moonuser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
leider gibt es wieder nur Fehler:
yalu wrote:

>
>
> (*time).Sekunde++;
> 
>
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)
>
>
> time->Sekunde++;
> 
>
ist gleichbedeutend, aber leider ../Funkuhr.c:84: error: request for 
member 'Sekunde' in something not a structure or union

> Der Type-Cast in
>
>
> Timecount((ZEIT*) &CTime);
> 
>
> ist übrigens überflüssig. Besser:
>
>
> Timecount(&CTime);
> 
>
> 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!

Autor: Michael Müller (moonuser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sorry hatte mich in der Zeile vertan.

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

arbeiten.


Danke!!

Grüße
Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.