Déclaration d'un prototype de type “struct” - C
J'ai cassé mon cerveau sur ce pendant un certain temps, je suis simplement en train d'essayer de créer une méthode qui renvoie une structure que je souhaite le retour de deux int.
Mon prototype de la méthode est comme suit:
typedef struct RollDice();
Également la méthode elle-même:
typedef struct RollDice()
{
diceData diceRoll;
diceRoll.dice1 = 0;
diceRoll.dice2 = 0;
return diceRoll;
}
Le compilateur affiche l'erreur: "Syntax error: ')'"
pour le prototype et de méthode.
La structure elle-même:
typedef struct
{
int dice1;
int dice2;
}diceData;
Est-il évident où je vais mal? J'ai essayé tout ce que je pense de.
Grâce
Modifier/Solution:
Pour obtenir le programme pour travailler avec les solutions proposées, j'ai dû apporter les modifications suivantes à la structure,
typedef struct diceData
{
int dice1;
int dice2;
};
OriginalL'auteur Jamie Keeling | 2010-03-23
Vous devez vous connecter pour publier un commentaire.
Vous aurez envie
typedef struct ... diceData
à se produire avant votre fonction, puis la signature de la fonction seradiceData RollDice()
.typedef <ORIGTYPE> <NEWALIAS>
signifie que chaque fois que<NEWALIAS>
se produit, le traiter comme si elle signifie<ORIGTYPE>
. Ainsi, dans le cas de ce que vous avez écrit, vous dire au compilateur questruct RollDice
est le type d'original (et bien sûr, il n'existe pas de structure définie); et puis il voit()
où il s'attendait à un nouvel alias.OriginalL'auteur Mark Rushakoff
C'est juste une version concrète de Marque Rushakoff réponse:
OriginalL'auteur
Vous ne pouvez pas utiliser typedef pour définir une fonction.
Typedef votre struct premier comme
Ensuite déclarer votre fonction en tant que
Qui déclare RollDice comme une fonction qui retourne un diceData struct.
Une autre façon de traiter avec le fait d'essayer de retourner deux valeurs serait d'utiliser les paramètres de sortie.
Dans ce cas, votre fonction doit retourner une valeur booléenne (pour indiquer le succès ou l'échec) et de prendre les deux pointeurs vers des entiers en paramètres. Au sein de la fonction vous avais remplir le contenu des pointeurs, comme ceci:
OriginalL'auteur Vicky
Le problème est que vous n'avez pas donné la méthode d'un type de retour. Il semble que vous devriez être de retour un
dicedata
type de sorte que le prototype de la signature ressembleraitEt la méthode
OriginalL'auteur JaredPar