声明类型为“的原型”;结构";-C

声明类型为“的原型”;结构";-C,c,struct,C,Struct,我为此绞尽脑汁已经有一段时间了,我只是想创建一个返回struct的方法,因为我希望返回两个int 我的方法原型如下: typedef struct RollDice(); 此外,该方法本身: typedef struct RollDice() { diceData diceRoll; diceRoll.dice1 = 0; diceRoll.dice2 = 0; return diceRoll; } 编译器显示原型和实际方法的错误:“语法错误:”)“ 结构本身: typedef

我为此绞尽脑汁已经有一段时间了,我只是想创建一个返回struct的方法,因为我希望返回两个int

我的方法原型如下:

typedef struct RollDice();
此外,该方法本身:

typedef struct RollDice()
{
 diceData diceRoll;

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

 return diceRoll;
}
编译器显示原型和实际方法的错误:
“语法错误:”)“

结构本身:

typedef struct
{
 int dice1;
 int dice2;
}diceData;
很明显我错在哪里了吗?我已经尝试了我能想到的一切

谢谢

编辑/解决方案:

为了让程序使用建议的解决方案,我必须对结构进行以下更改

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

您将需要
typedef结构。。。diceData
出现在函数之前,然后函数的签名将是
diceData RollDice()


typedef
表示每当发生
时,将其视为
的意思。因此,在您编写的情况下,您告诉编译器,
struct RollDice
是原始类型(当然,没有定义这样的结构);然后它看到了它期待一个新别名的地方。

这只是马克·拉沙科夫答案的一个具体版本:

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

diceData RollDice()
{
  diceData diceRoll;

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

  return diceRoll;
}

问题是你没有给这个方法一个返回类型。看起来您应该返回一个
dicedata
类型,这样原型签名看起来像

struct dicedata RollDice();
方法呢

struct dicedata RollDice()
{
    diceData diceRoll;

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

    return diceRoll;
}

不能使用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;
}

谢谢你的详细回答