2013-10-20 38 views
-2

我有一段代碼。編譯我使用gcc編譯器。錯誤:在工會分配不兼容類型

union uStackElement { 
       int i; 
       double d; 
} 
typedef union uStackElement StackElement; 

... 
StackElement stack_pop(Stack s); 
... 
StackElement a = stack_pop(Stack s); // error: incompatible types in assignment 
... 

我不明白什麼是錯的。 :(

UPD: 棧定義:

struct sStack 
{ 
     int top ; 
     StackElement array[STACK_SIZE]; 
}; 
typedef struct sStack Stack; 

功能stack_pop:

StackElement stack_pop(Stack s) { 
     StackElement ret; 
     if (s.top < 0) { 
       // TODO : error 
     } 
     ret = s.array[s.top--]; 
     return ret; 
} 

回答

1

這是可能的,這是你的錯誤:

union uStackElement { 
      int i; 
      double d; 
} // << missing semicolon 

話雖這麼說,有還有其他一些問題,比如需要通過Stack對象作爲一個指針,如果你要改變它。


以下代碼編譯成功,這就是您在此處顯示的所有內容。

#define STACK_SIZE 10 

union uStackElement { 
    int i; 
    double d; 
}; 
typedef union uStackElement StackElement; 

struct sStack 
{ 
    int top; 
    StackElement array[STACK_SIZE]; 
}; 
typedef struct sStack Stack; 

StackElement stack_pop(Stack s) { 
    StackElement ret; 
    if (s.top < 0) { 
     // TODO : error 
    } 
    ret = s.array[s.top--]; 
    return ret; 
} 

int main() { 
    Stack s; 
    StackElement a = stack_pop(s); 
} 

如果上面的代碼做看起來像你的代碼,那麼你需要編輯你的問題,這樣我可以把你的代碼,並通過編譯器運行它,看看錯誤自己。否則,你不包含的代碼實際上就是錯誤所在。

+0

如果沒有分號,它會給出一堵錯誤和警告。 – zubergu

+0

@zubergu:我只是得到:'foo.c:6:2:error:expected';'在工會之後,但我同意提出的錯誤不是我所期望的。 –