Ошибка переключения :: не может появиться в константном выражении

это странная ...

I я играю с некоторым алгоритмом декомпрессии. Вместо того, чтобы проходить через буфер символов [] и зацикливаться до тех пор, пока не будет найден стоп-бит в буфере [i] , я пытаюсь использовать некоторые методы битовой маски, но с символами.

У меня есть следующий пример:

// 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;  
    }  
};  

Без учета синтаксиса материала union (фактический код компилируется для этого нормально) и без учета того, будет ли функция return для Foo красиво, я получаю
'uMask1' не может появиться в константном выражении
, и если используются сами объединения, я получаю
'Mask1' не может появляться в константном выражении
'.' не может появиться в константном выражении
и, конечно же, ошибки также применимы к uMask2 и Mask2.u

Что мне не хватает?

Заранее спасибо

6
задан globalcouchsurfer 29 September 2010 в 16:48
поделиться