错误:在struct中的'='标记之前预期':',',',';','}'或'__attribute__'

时间:2017-12-15 15:08:27

标签: c struct malloc token

使用gcc -Wall -std = c99:

编译时出错

pokerhand.c:20:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
Card *cards = malloc(sizeof(Card)*5);

这是我发生错误的代码

typedef struct card 
{
    char suit;
    char *face;
} Card;

typedef struct hand 
{
    Card *cards = malloc(sizeof(Card)*5);
    char *result;
} Hand;

我在这些结构之前的所有内容都是标题包含

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>

2 个答案:

答案 0 :(得分:5)

您无法在结构声明中编写代码。那是错的。

我打赌这会解决错误

typedef struct hand 
{
    Card *cards;
    char *result;
} Hand;

稍后,当您使用该类型声明适当的变量时,可以分配给它。

这也可行

typedef struct hand 
{
    Card cards[5];
    char *result;
} Hand;

如果您认为每个hand每次都会包含5卡,那么您可以像这样添加它。

在第一种情况下,您需要分配card,然后在完成工作后将其释放。

答案 1 :(得分:1)

你不能做&#34;做事&#34;定义struct时使用struct个成员。

所以Card *cards = malloc(sizeof(Card)*5);毫无意义,编译器会发出诊断信息。

一种解决方案是构建一个init_card函数,它将struct card*作为输入参数;然后你在那里进行初始化。如果您还构建了相应的free_card函数,那么您最终会得到一些可以非常好地扩展的内容。