This is strange...
I play with some decompression algorithm. Instead of going through char buffer[] and the loop until a stop bit is found in buffer[i] , I'm trying to use some bit mask methods, but with characters.
I have the following example:
// In a *.h file const char ch = '\x81'; // To avoid Endianess union CharUInt { char sz[4]; unsigned int u; }; // Legal because char[] is declared before uint32 in the union const CharUInt Mask1 = {'\x81', '\x0', '\x0', '\x81'}; const CharUInt Mask2 = {'\x0', '\x81', '\x81', '\x0'}; // Proxy / Auxillary uint32 as usimg Mask2.u in the switch blocked produced the same errors const unsigned int uMask1 = Mask1.u; const unsigned int uMask2 = Mask2.u; const unsigned int uMask_ = (uMask1 & uMask2); // buf is always long enough bool Foo(char buf[]) { const CharUInt Type = {buf[0], buf[1], buf[2], buf[3]}; unsigned int uType = (Type.u & uMask_); switch(uType) { case uMask1: // do stuff case uMask2: // do more stuff return true; break; default: // do different stuff return false; break; } };
Without considering the syntax of union material (actual code compilations work fine for this) and without considering whether the return function is good for Foo , I get 'uMask1' cannot appear in a constant-expression
and if the unions themselves are used, I get 'Mask1' cannot appear in a constant-expression
'.' cannot appear in a constant-expression
and, of course, the errors apply to uMask2 and Mask2.u
What am I missing?
Thanks in advance
c ++ switch-statement compiler-errors
globalcouchsurfer
source share