2010-03-23 42 views
5

我一直絞盡腦汁在這一段時間,我只是想創建,我想返回兩個int的返回一個結構的方法。聲明的類型「結構」的原型 - Visual C

我的原型爲方法如下:

typedef struct RollDice(); 

而且該方法本身:

typedef struct RollDice() 
{ 
diceData diceRoll; 

diceRoll.dice1 = 0; 
diceRoll.dice2 = 0; 

return diceRoll; 
} 

編譯器顯示了錯誤:"Syntax error: ')'"兩者的原型和實際方法。

的結構本身:

typedef struct 
{ 
int dice1; 
int dice2; 
}diceData; 

是很明顯我要去哪裏錯了嗎?我試過了我能想到的一切。

感謝

編輯/解決方案:

爲了讓節目與建議的解決方案,我不得不做出以下更改結構工作,

typedef struct diceData 
    { 
    int dice1; 
    int dice2; 
    }; 

回答

9

你想typedef struct ... diceData你的函數之前發生,然後該函數的簽名會diceData RollDice()

typedef <ORIGTYPE> <NEWALIAS>意味着無論何時<NEWALIAS>發生,都將其視爲<ORIGTYPE>。所以在你寫什麼的情況下,你是在告訴編譯器struct RollDice是原始類型(當然,有沒有這樣的結構定義);然後它看到()它被期待一個新的別名。

+0

不客氣。 – 2010-03-23 16:24:37

6

這只是馬克Rushakoff的回答的具體版本:

typedef struct 
{ 
    int dice1; 
    int dice2; 
} diceData; 

diceData RollDice() 
{ 
    diceData diceRoll; 

    diceRoll.dice1 = 0; 
    diceRoll.dice2 = 0; 

    return diceRoll; 
} 
+0

感謝您的澄清 – 2010-03-23 16:23:49

1

問題是你沒有給方法的返回類型。它看起來像你應該返回一個dicedata類型,這樣的原型簽名看起來像

struct dicedata RollDice(); 

而且方法

struct dicedata RollDice() 
{ 
    diceData diceRoll; 

    diceRoll.dice1 = 0; 
    diceRoll.dice2 = 0; 

    return diceRoll; 
} 
3

不能使用的typedef定義一個函數。

您的typedef結構第一像

typedef struct 
{ 
    int dice1; 
    int dice2; 
} diceData; 

然後聲明您的功能

diceData RollDice() 
{ 
    diceData diceRoll; 

    diceRoll.dice1 = 0; 
    diceRoll.dice2 = 0; 

    return diceRoll; 
} 

聲明RollDice作爲一個返回diceData結構的功能。

的另一種方式來處理試圖返回兩個值是使用out參數。

在這種情況下,您的函數將返回一個布爾值(表示成功或失敗)並將兩個指針指向整數作爲參數。在函數內部,您可以填充指針的內容,如下所示:

bool_t rollDice(int *pDice1, int *pDice2) 
{ 
    if (pDice1 && pDice2) 
    { 
     *pDice1 = 0; 
     *pDice2 = 0; 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

int main(int argc, char **argv) 
{ 
    int a, b; 
    rollDice(&a, &b); 

    return 0; 
} 
+0

感謝您的詳細解答 – 2010-03-23 16:24:07