A következő kódban hibaüzenetet kapok, amikor a lebegőmutatót egy struktúrába gépelem, de a fordító nem panaszkodik, ha másra írok. Miért csinálja ezt?
typedef unsigned byte CELbool;
typedef struct {(...)} Color;
typedef struct {
(...)
Color color;
CELbool b;
} Light;
Light _light;
void function(float *x) {
_light.b = (CELbool)*x; // No error
_light.color = (Color)*x; // (!) Used type 'Color' where arithmetic or pointer type is required
}
Szerkesztés: Mondjuk tehát, hogy az *x egy színre mutató mutató, akkor mi lenne a megfelelő módja annak, hogy megszerezzem ezt a színt? Jelenleg a Color c = *((Color *)(value))
-t használom, de nem hiszem, hogy ez a megfelelő módja ennek.
x
valóban egyColor
-ra mutató mutató, akkor a*(Color *)x
lenne a módja annak, hogy megkapjuk; ez azt mondja, konvertálja ax
-et mutatóváColor
-re, majd törölje a hivatkozást. Ez azt jelenti, hogy miért mutat ax
valójában egyColor
-re, ha a paraméter egyfloat*
? Ez aggasztónak tűnik. 07.03.2012float *value
ugyanaz, mint afloat value[]
, a Color pedig három lebegés(r,g,b), amifloat value[3]
-ra egyszerűsödik. Az én módszerem valójában különféle dolgokat állítana be egy másik paramétertől függően. Valószínűleg a void*-ot kellene használnom, de a leggyakoribb bemenet a float. 07.03.2012