mikrocontroller.net

Forum: Compiler & IDEs Pointer auf komplexe Struktur


Autor: Sebastian.O (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Jungs und Mädels! Ich hab da mal ne Frage zum unleidigen Pointer 
Thema:

Auf dem Struktur.JPG Bild seht ihr eine relativ komplexe Struktur 
lightModulesSCA. Ich muss nun ein paar Berechnungen mit den in dieser 
Struktur vorhandenen Werten machen. Pro LED Cluster muss ich die in 
dieser Stuktur vorhandenen Werte nehmen, berechnen und in die Struktur 
CalculatedColorValues abspeichern. Den zugehörigen Code seht ihr auf dem 
Bild Code.JPG.
Kurze Code Erklärung:
Um mir viel Schreibarbeit zu sparen hab ich einen Pointer vom TYP 
CalData (Zeile 139) angelegt und verweise immer auf die nötige Stuktur, 
in der ich gerade arbeiten will. Die Berechnungen (Zeile 142/143) 
scheinen auch so zu stimmen.
Mein Problem ist jetzt allerdings in Zeile 145:
ich möchte gerne meine Berechnungen wieder mittels des Pointers in meine 
Struktur schreiben, wobei ich immer einen Fehler bekomme: invalid type 
argument '->' (Natürlich hab ich auch die Varianten '.' ohne * etc. 
probiert, klappt aber auch nicht)
Wenn ich die Daten direkt in die Struktur schreibe siehe Zeile 147 
scheint alles zu funktionieren!
Kann mir jemand sagen warum das so wie ich das machen will nicht 
funktioniert??

Eine zweite Frage stellt sich mir noch bezüglich '->' und '.' ich dachte 
immer das diese Zeichen gleich zu setzten sind. Aber wenn ich in Zeile 
142 oder 143 '->' mit '.' tausche erhalte ich ne Fehlermeldung: request 
for member 'gur'(je nachdem wo ich '->' mit '.' tausche) in something 
not a structure or union
WARUM??

Vielen Dank
Greez der baschtel

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Eine zweite Frage stellt sich mir noch bezüglich '->' und '.' ich dachte
> immer das diese Zeichen gleich zu setzten sind.

wow, das sich bei so einem umfangreichen Projekt noch sooo eine 
wissenslücke auftut...  Lies mal im C-Buch deiner Wahl nach, was die 
beiden Opteratoren so tun. Dann wird dir bestimmt auch klarer, was in 
der Zeile schief läuft. Ich steig da auch die schnelle nicht durch die 
Struktur durch.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pCD->calculatetedColorValues.matrix[0][0] =

Und das nächste Mal präsentierst du uns Code als Text, und nicht als 
Bilder.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian.O schrieb:

> Auf dem Struktur.JPG Bild

Es wäre besser gewesen, wenn du den Codeausschnitt per Cut&Paste hier 
eingestellt hättest. Dann könnte man jetzt einfach den Codeausschnitt 
auf den man sich in der Antwort bezieht wieder rauskopieren, die 
Änderung machen und dir hier im Forum zukommen lassen. So muss ich alles 
entweder abtippen oder beschreiben. Beides ist fehleranfällig, 
umständlich und eigentlich viel Arbeit für uns.


> Kurze Code Erklärung:
> Um mir viel Schreibarbeit zu sparen hab ich einen Pointer vom TYP
> CalData (Zeile 139) angelegt

Und als aller erstes wirfst du gleich mal den Cast raus.
Cast sind Waffen. Wenn du an dieser Stelle einen Cast benötigst, hast du 
etwas grundsätzlich falsch deklariert und kaschierst den Fehler, indem 
du den Compiler dazu zwingst, etwas Falsches zu akzeptieren.

> und verweise immer auf die nötige Stuktur,
> ich möchte gerne meine Berechnungen wieder mittels des Pointers in meine
> Struktur schreiben, wobei ich immer einen Fehler bekomme: invalid type
> argument '->' (Natürlich hab ich auch die Varianten '.' ohne * etc.
> probiert, klappt aber auch nicht)

Lass den ersten * weg

   Pointer->...->Array[0][0]
ist schon der Wert.

Und der zweite -> muss ein . sein. calculatedColorValues ist 
schliesslich eine Struktur und kein Pointer.

> Eine zweite Frage stellt sich mir noch bezüglich '->' und '.' ich dachte
> immer das diese Zeichen gleich zu setzten sind.

Nein.
Bittte tu dir selbst einen Gefallen und lies ein C-Buch


   a->b  ist eine andere (bequemere) Schreibweise für (*a).b

Aber es ist die Kombination aus *, ( ) und .  die identisch ist zu ->

> 142 oder 143 '->' mit '.' tausche erhalte ich ne Fehlermeldung: request
> for member 'gur'(je nachdem wo ich '->' mit '.' tausche) in something
> not a structure or union
> WARUM??

Weil du kein C-Buch gelesen hast. Daher fehlen dir die Grundlagen und 
deshalb verwirrt dich dieser unsäglich grausliche Code.

Autor: Sebastian.O (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Asche über mein Haupt!

Das nächste mal werd ich den Code direkt in den Text kopieren -> Sorry!

>Und als aller erstes wirfst du gleich mal den Cast raus.
>Cast sind Waffen. Wenn du an dieser Stelle einen Cast benötigst, hast du
>etwas grundsätzlich falsch deklariert und kaschierst den Fehler, indem
>du den Compiler dazu zwingst, etwas Falsches zu akzeptieren.

Den Cast hab ich nicht gebraucht... Das mit den "Cast Waffen" werd ich 
mir merken! :-)

>Und der zweite -> muss ein . sein. calculatedColorValues ist
>schliesslich eine Struktur und kein Pointer.

Ich glaub jetzt hab ichs verstanden..

>Bittte tu dir selbst einen Gefallen und lies ein C-Buch

Jup, es hat Vorteile zuerst ein C Buch zu lesen! (Auch wenn Ihr mir das 
jetzt nicht glaubt, das hab ich gemacht aber ist schon ne ganze Weile 
her, seitdem hab ich auch nie wieder etwas mit c zu tun gehabt, was sich 
jetzt bitterböse bei mir rächt)

Dankö!

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.