2013-03-13 90 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

爲什麼我不允許在那裏聲明一個變量?我認爲這是允許的...... – 2013-03-13 21:18:23

+0

你在C89模式下編譯? – 2013-03-13 21:19:33

回答

2

直接在switch之後的變量r a case你需要有一個塊,例如

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

編輯:原因很簡單,一個標籤只能後跟一個語句,一個聲明或初始化不是語句,而塊(即複合語句)的。

+0

非常感謝! – 2013-03-13 21:38:47