我已经绞尽脑汁待了一段时间,我只是想创建一个返回结构的方法,因为我希望返回两个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;
};
答案 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;
}