2010-03-23 12 views
5

Przez pewien czas dręczyło mnie to w głowie, po prostu próbuję stworzyć metodę zwracającą strukturę, ponieważ chcę zwrócić dwie wartości int.Deklarowanie prototypu typu "struct" - C

Mój prototyp dla metody jest następujący:

typedef struct RollDice(); 

Również sama metoda:

typedef struct RollDice() 
{ 
diceData diceRoll; 

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

return diceRoll; 
} 

Kompilator pokazuje błąd: "Syntax error: ')'" zarówno do prototypu i rzeczywistej metody.

Struct sama:

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

jest oczywiste, dokąd idę źle? Próbowałem wszystkiego, co potrafię wymyślić.

Dzięki

Edycja/Rozwiązanie:

Aby uzyskać program do pracy z sugerowanych rozwiązań musiałem wprowadzić następujące zmiany do struktury,

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

Odpowiedz

9

Będziesz chcesz, aby typedef struct ... diceData wystąpił przed twoją funkcją, a następnie podpis funkcji będzie diceData RollDice().

typedef <ORIGTYPE> <NEWALIAS> oznacza, że ​​zawsze gdy występuje <NEWALIAS>, traktuj to tak, jakby to oznaczało <ORIGTYPE>. Więc w przypadku tego, co napisałeś, mówisz kompilatorowi, że struct RollDice jest oryginalnym typem (i oczywiście nie ma takiej zdefiniowanej struktury); a następnie widzi (), gdzie oczekiwał nowego aliasu.

+0

Nie ma za co. –

6

To jest tylko beton wersja odpowiedzi Mark Rushakoff za:

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

diceData RollDice() 
{ 
    diceData diceRoll; 

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

    return diceRoll; 
} 
+0

Dziękuję za wyjaśnienia. –

1

Problemem jest to, że nie dały metody typ zwrotny. Wygląda na to powinno być powrocie typ dicedata więc podpis prototyp będzie wyglądać

struct dicedata RollDice(); 

i sposobu

struct dicedata RollDice() 
{ 
    diceData diceRoll; 

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

    return diceRoll; 
} 
3

nie można używać typedef zdefiniować funkcję.

typedef struct swoim pierwszym jak

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

Następnie zadeklarować swoją funkcję jako

diceData RollDice() 
{ 
    diceData diceRoll; 

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

    return diceRoll; 
} 

który deklaruje RollDice jako funkcja, która zwraca struct diceData.

Alternatywnym sposobem radzenia sobie z próbą zwrócenia dwóch wartości byłoby użycie parametrów wyjściowych.

W takim przypadku twoja funkcja zwróci wartość boolowską (wskazującą powodzenie lub niepowodzenie) i jako parametry przyjmie dwa wskaźniki do liczb całkowitych. W ramach funkcji wypełnisz zawartość wskaźników, na przykład:

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

Dziękuję za szczegółową odpowiedź –