Inkompatible Typen in Zuweisung

Gast #1510359
Lesenswert?

Hallo ich programmiere mit Eclipse C++.
Dazu habe ich unter anderem eine Funktion erstellt, die eigentlich 
nichts anderes tun soll als die eingegebenen Daten in ein Array von 
einer Struktur übergeben soll.

Beispiel:
1
struct
2
{
3
 daten[20];
4
}st;
5

6

7
st stDaten;
8

9
void copy(unsigned char * buffer)
10
{
11
 stDaten.daten = buffer
12
}

Der Kompiler zeigt mir immer diese Fehlermeldung an:
 --> inkompatible Typen in Zuweisung
Woran liegt das? Was müsste ich in meinem Code andern?
#1510369
Lesenswert?

programmierer schrieb:

> Beispiel:
>
1
> struct
2
> {
3
>  daten[20];
4
> }st;
5
>

Welchen Datentyp hat den daten[20]?

>
1
> void copy(unsigned char * buffer)
2
> {
3
>  stDaten.daten = buffer
4
> }
5
>
>
> Der Kompiler zeigt mir immer diese Fehlermeldung an:
>  --> inkompatible Typen in Zuweisung

Das glaub ich sofort

a) du hast uns nicht gesagt, welchen Datentyp daten denn nun wirklich
   hat

b) einem Array kann man nichts als Ganzes zuweisen. Immer nur einem
   spezifischen Element des Arrays.
   Welches solls denn sein?
#1510379
Lesenswert?

programmierer schrieb:
> Sorry hab ich vergessen.
> daten ist auch vom Typ "unsigned char"

damit steht links vom Zuweisungszeichen der Datentyp
   unsigned char[20]
und rechts davon
   unsigned char*

Zusammen also
    unsigned char[20] = unsigned char *

Und das mosert der Compiler an. Er sieht auch keine Möglichkeit, wie er 
selbst den Teil rechts vom = umwandeln kann, so dass auf beiden Seiten 
das Gleiche steht.

(Das bedeutet aber immer noch nicht, dass man einem Array als Ganzes 
etwas zuweisen kann)
#1510389
Lesenswert?

Du wirst dich also wohl oder übel

a) auf der linken Seite für ein Element des Arrays entscheiden müssen
b) auf der rechten Seite den Pointer dereferenzieren müssen.

Also zb sowas
1
   stDaten.daten[5] = *buffer;
(Für die 5 natürlich dann der Indexwert den du tatsächlich haben willst)

denn dann steht da datentyp-mässig gesehen

 (unsigned char[20]) Operation-[]  =  Operation-* (unsigned char *)

links: ein Einzelelement eines Arrays hat den Basistyp des Arrays, die 
linke Seite 'kürzt' sich daher zu unsigned char.
und rechts: dereferenziert man einen Pointer, erhält man den Datentyp 
der Werte, auf den der Pointer zeigt. Auf der rechten Seite hebt also 
die Operation '*' ausserhalb der Klammer den * innerhalb der Klammer 
auf.

Beides zusammengenommen ergibt aus Sicht der Datentypen daher

     unsigned char = unsigned char

und damit ist dann auch der Compiler happy, weil links und rechts 
derselbe Datentyp rauskommt.

Ob das allerdings in Summe die Operation ist, die du haben willst, ist 
eine andere Geschichte.
#1510413
Lesenswert?

Das hängt davon ab, was du (aus einer höheren Warte betrachtet) 
eigentlich tun willst :-)

Was ist den daten?
Sind das 20 Einzelwerte, oder ist das ein Array welches als ganzen einen 
Wert verkörpert (wie zb einen String)

Aber auf lange Sicht gesehen solltest du den Ratschlag von Peter 
beherzigen und dir ein Buch kaufen und auch durcharbeiten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren