2013-03-13 3 views
1

Итак, у меня есть эта функция, и у меня возникают некоторые странные ошибки, которые я не могу понять.Странные ошибки в указателе

void serialize_helper(huff *h, bits *history, char** a) 
{ 
    switch (h->tag) { 
    case LEAF: 
    char letter = h->h.leaf.c; 
    int arraynum = (int)letter; 
    a[arraynum] = bits_show(history); 
    putchar('\n'); 
    return; 
    case NODE: 
    /* traverse left subtree */ 
    bits_putlast('0',history); 
    serialize_helper(h->h.node.lsub,history, a); 
    bits_remove_last(history); 
    /* traverse right subtree */ 
    bits_putlast('1',history); 
    serialize_helper(h->h.node.rsub,history, a); 
    bits_remove_last(history); 
    return; 
    default: 
    fprintf(stderr,"main.serialize_helper: bad tag\n"); 
    exit(1); 
    } 
} 

Я получаю эту ошибку для простого определения переменного (из полукокса письма = ...;):

"huffenc.c: 18: ошибка: ожидается выражение перед 'полукоксом'"

Кроме того, компилятор действует как моя декларация «письмо» не существует: «huffenc.c: 19: ошибка:„буква“необъявленную (первое использование в этой функции)»

+0

Почему мне не разрешено объявлять переменную там? Я думал, что это разрешено ... –

+0

Вы компилируете в режиме C89? –

ответ

2

Если вы хотите определить переменная в switch непосредственно afte r a case вам нужно иметь блок, например.

case LEAF: { 
    char letter = h->h.leaf.c; 
    int arraynum = (int)letter; 
    a[arraynum] = bits_show(history); 
    putchar('\n'); 
    return; 
    } 

EDIT: причина заключается в том, что просто метка может следовать только заявление и декларация или инициализация не является утверждением, в то время как блок (т.е. составного оператора) есть.

+0

Оттолкни меня! –

Смежные вопросы