声明“struct”类型的原型 - C.

时间:2010-03-23 16:12:47

标签: c struct

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

我的方法原型如下:

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;
    };

4 个答案:

答案 0 :(得分:8)

你希望在你的函数之前发生typedef struct ... diceData,然后函数的签名将是diceData RollDice()

typedef <ORIGTYPE> <NEWALIAS>表示每当<NEWALIAS>出现时,请将其视为<ORIGTYPE>。因此,对于您编写的内容,您告诉编译器struct RollDice是原始类型(当然,没有定义此类结构);然后它会看到()期待新别名的地方。

答案 1 :(得分:5)

这只是Mark Rushakoff答案的具体版本:

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

diceData RollDice()
{
  diceData diceRoll;

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

  return diceRoll;
}

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

struct dicedata RollDice();

方法

struct dicedata RollDice()
{
    diceData diceRoll;

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

    return diceRoll;
}