2010-03-23 18 views
5

Mi sono tormentato per un po ', sto semplicemente provando a creare un metodo che restituisca una struttura in quanto desidero restituire due int.Dichiarare un prototipo di tipo "struct" - C

mio prototipo per il metodo è il seguente:

typedef struct RollDice(); 

Anche il metodo stesso:

typedef struct RollDice() 
{ 
diceData diceRoll; 

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

return diceRoll; 
} 

Il compilatore mostra l'errore: "Syntax error: ')'" sia per il prototipo e il metodo attuale.

La struct stesso:

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

è ovvio dove sto andando male? Ho provato tutto quello che riesco a pensare.

Grazie

Modifica/Soluzione:

per ottenere il programma di lavorare con le soluzioni proposte ho dovuto apportare le seguenti modifiche al struct,

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

risposta

9

Avrete vuoi che typedef struct ... diceData si verifichi prima della tua funzione, e quindi la firma della funzione sarà diceData RollDice().

typedef <ORIGTYPE> <NEWALIAS> significa che ogni volta che si verifica <NEWALIAS>, trattarlo come se significasse <ORIGTYPE>. Quindi, nel caso di ciò che hai scritto, stai dicendo al compilatore che struct RollDice è il tipo originale (e, naturalmente, non esiste una tale struttura definita); e poi vede () dove si aspettava un nuovo alias.

+0

Prego. –

6

Questa è solo una versione concreta risposta di Marco Rushakoff:

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

diceData RollDice() 
{ 
    diceData diceRoll; 

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

    return diceRoll; 
} 
+0

Grazie per il chiarimento –

1

Il problema è che non hai dato il metodo di un tipo di ritorno. Sembra che si dovrebbe essere restituisce un tipo dicedata così la firma del prototipo sarà simile

struct dicedata RollDice(); 

E il metodo

struct dicedata RollDice() 
{ 
    diceData diceRoll; 

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

    return diceRoll; 
} 
3

Non è possibile utilizzare typedef per definire una funzione.

Typedef tua struct prima come

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

quindi dichiarare la vostra funzione come

diceData RollDice() 
{ 
    diceData diceRoll; 

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

    return diceRoll; 
} 

che dichiari RollDice come una funzione che restituisce una struct diceData.

Un modo alternativo per gestire il tentativo di restituire due valori consiste nell'utilizzare i parametri.

In tal caso, la funzione restituisce un valore booleano (per indicare il successo o l'errore) e prende due puntatori ai numeri interi come parametri. All'interno della funzione compili il contenuto dei puntatori, in questo modo:

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

Grazie per la risposta dettagliata –

Problemi correlati