2014-10-01 111 views
0
enum denomination 
    { 
     FIVE_CENTS, TEN_CENTS, TWENTY_CENTS, FIFTY_CENTS, ONE_DOLLAR, 
     TWO_DOLLARS, FIVE_DOLLARS, TEN_DOLLARS 
    }; 

    struct DENOM_NAME 
    { 
     char name[MAX_NAME]; 
     enum denomination denom; 
    }; 

    /* Table of names and matching denominations */ 
    static struct DENOM_NAME denomTable[8] = { 
     { "5", FIVE_CENTS }, 
     { "10", TEN_CENTS }, 
     { "20", TWENTY_CENTS }, 
     { "50", FIFTY_CENTS }, 
     { "100", ONE_DOLLAR }, 
     { "200", TWO_DOLLARS }, 
     { "500", FIVE_DOLLARS }, 
     { "1000", TEN_DOLLARS } 
    }; 

我已經知道用值初始化數組是可以的,但不知何故編譯器會抱怨混合聲明和代碼(c90 btw)。我該如何解決?初始化類型結構數組

+1

如何定義'enum denomination'?什麼是錯誤信息? – 2014-10-01 07:47:41

+0

將結構聲明中的枚舉更改爲int或char,並先定義您的枚舉。 枚舉不會在內存中創建單元,所以它不適用於結構 enum像#define,它給出了一些常量的名稱 – 2014-10-01 07:54:43

+0

您在聲明之前有一些可執行代碼。看看編譯器抱怨之前的幾行。如果可能的話,升級到C11(甚至只是C99)編譯器,或將編譯選項升級到C99或(最好)C11。 – 2014-10-01 08:02:44

回答

2

您可以從C89/C90編譯器代碼得到的錯誤是這樣的:

void function(void) 
{ 
    int i = 23;   /* OK - initialization */ 
    printf("%d\n", i); /* OK - executable statement (code) */ 
    enum denomination /* BAD - declaration mixed with code */ 
    { 
     FIVE_CENTS, TEN_CENTS, TWENTY_CENTS, FIFTY_CENTS, ONE_DOLLAR, 
     TWO_DOLLARS, FIVE_DOLLARS, TEN_DOLLARS 
    }; 
    … 

你可以有一個簡單的函數調用,分配,流浪多餘的分號,或者說前行,其中錯誤開始。

請注意,C99和C11遵循C++的領導,並允許(幾乎)函數(語句塊)中的任何點的變量定義。上面的大綱代碼在C99和C11中都很好。

+0

這會做到這一點。 'int denomination = 0;'會好的; 'int面額;面額= 0;'後面的類型定義不正確。 – 2014-10-01 08:14:54

+0

感謝。顯然這是我的這一行: INT面額; 面額= 0; 由int denomination = 0固定; – Teddy 2014-10-01 08:15:06