Hallo, ich bekomme bei folgender Zeile immer eine Warnung: enum EWochentag { NODAY = 0, MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG }; eWochentag = u8_I2cTranceiverBuffer[0]; Warning[Pe188]: enumerated type mixed with another type Wie bekomme ich diese weg. Ich benutze den IAR Compiler. Danke
Auszug aus der C++-Doku: The underlying type of an enumeration is an integral type that can represent all the enumerator values defined in the enumeration. If no integral type can represent all the enumerator values, the enumeration is ill-formed. It is implementationdefined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int. If the enumerator-list is empty, the underlying type is as if the enumeration had a single enumerator with value 0. The value of sizeof() applied to an enumeration type, an object of enumeration type, or an enumerator, is the value of sizeof() applied to the underlying type. Es ist also nicht klar, welcher Datentyp hinter Deinem enum liegt. Zuweisungen von anderen Datentypen zu Enums sind eigentlich verboten. Ich würde vorschlagen, die Tage als defines abzulegen
1 | #define NODAY 0
|
2 | #define MONTAG 1
|
3 | #define DIENSTAG 2
|
4 | ...
|
und dann eWochentag als entspr. integralen Datentyp (z.B. int oder char) zu definieren.
Du brauchst einen Cast. eWochentag = (EWochentag) u8_I2cTranceiverBuffer[0]; Im Gegensatz zu Florian glaube ich dass es schon sinnvoll sein kann, enums anstelle von Defines und ints zu verwenden. Dies nur wenn es wenige Stellen im Programm gibt, an denen solche Casts wie oben nötig sind und ansonsten immer nur Variablen vom Type EWochentag untereinander zugeweisen werden. Ein Problem mit Enums auf 8 Bit uC könnte noch die Platzverschwendung sein, wenn die Enums wie definert auf integer gemappt werden (= 16 Bit).
Hallo Klaus, ich habe das mal ausprobiert, leider klappt es nicht. Er sagt das er EWochentag nicht kennt.
> enum EWochentag { NODAY = 0, > eWochentag = u8_I2cTranceiverBuffer[0]; ... passt halt nicht zusammen: EWochentag != eWochentag.
Vielleicht probierst Du es einmal so: typedef enum { NODAY = 0, MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG } EWochentag; int main(void) { char u8_I2cTranceiverBuffer[10]; EWochentag eWochentag; eWochentag = (EWochentag) u8_I2cTranceiverBuffer[0]; return 0; }
Weil ich eben selbst auch nach einer Lösung gesucht habe.
1 | #pragma diag_suppress=Pe188
|
2 | eWochentag = u8_I2cTranceiverBuffer[0]; |
Hallo, naja Leopold, einfach die Meldung abschalten? Der enum wird eingesetzt, weil man die Typ-Prüfung wünscht. Da muss es einen guten Grund geben, warum ich sie nicht nutzt. Also wenn überhaupt, dann ein cast. tschü Dude
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.