Forum: Compiler & IDEs Pointer auf komplexe Struktur


von Sebastian.O (Gast)


Angehängte Dateien:

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

von Klaus (Gast)


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.

von Stefan E. (sternst)


Lesenswert?

1
pCD->calculatetedColorValues.matrix[0][0] =

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

von Karl H. (kbuchegg)


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.

von Sebastian.O (Gast)


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ö!

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.