数据结构中的specifier-qualifier-list错误

时间:2013-09-17 23:31:16

标签: c data-structures valgrind

以下是数据结构的一些代码:

struct node {
    char* command;
    char** prereq;
    prereq = malloc(100*sizeof(char*));
    for (int i = 0; i<100; i++)
    {
        prereq[i]=malloc(80);
    }
    Node *next;
    char *targ;
    int isUpdated;
};

但是,当我尝试在其中运行具有此结构的程序时,我收到此错误:

error: expected specifier-qualifier-list before ‘prereq’

在阅读了这个错误后,当有人试图创建一个链表而不在结构中声明'struct'时,它看起来最常见。但是,我对它如何适用于我的结构感到困惑。

如果有帮助,我在标题中有这个:

typedef struct node Node;

1 个答案:

答案 0 :(得分:0)

你不能在结构定义中写一个for循环!或者是任务,来吧。即使C ++也不会接受它的写作。

typedef struct node Node;
struct node
{
    char  *command;
    char **prereq;
    Node  *next;
    char  *targ;
    int    isUpdated;
};

那应该没问题(虽然它是我的代码,我使用typedef struct Node Node;struct Node { ... }; - 结构标签与typedef名称在一个单独的命名空间中,所以没有问题。)

然后,您可以将初始化代码放在单独的函数initnode()或类似的函数中:

int initnode(Node *node)
{
    node->command = 0;
    node->next = 0;
    node->targ = 0;
    node->isUpdated = 0;
    if ((node->prereq = malloc(100*sizeof(char*))) == 0)
        return -1;
    for (int i = 0; i < 100; i++)
    {
        if ((node->prereq[i] = malloc(80)) == 0)
        {
            for (int j = 0; j < i; j++)
                 free(node->prereq[j]);
            free(node->prereq);
            node->prereq = 0;
            return -1;
        }
    }
    return 0;
}