如何删除错误:在'='标记之前预期':',',',';','}'或'__attribute__'?

时间:2016-03-12 22:19:43

标签: c data-structures

program picture

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

struct tree {
    int data;
    struct tree *left, *right;
};

struct queue {
    struct tree **nodeQ = (struct tree**)malloc(sizeof(struct tree*));
    int front;
    int rear;
};

2 个答案:

答案 0 :(得分:1)

在C中,您无法像尝试使用nodeQ成员一样初始化内联结构成员。

创建结构时需要初始化成员。

所以你需要做一些像

这样的事情
struct queue q = { malloc(sizeof(struct tree *)), 0, 0 };

struct queue *q = malloc(sizeof(struct queue));
q->nodeQ = malloc(sizeof(struct tree *));
q->front = 0;
q->rear = 0;

请注意我do not cast the result of malloc

答案 1 :(得分:0)

您遇到的问题是在定义结构时初始化结构。 使用struct name_of_struct {...}时;您正在定义数据类型。因此,你不能给它一个正面的价值。

struct tree{

     int data;        
     struct tree *left,*right;    

};       


struct queue{

    struct tree ** nodeQ;  
    int front;    
    int rear;    

};    

这应该作为一个定义,也记得使用缩进和注释你的代码,因为这将导致一个更容易理解的程序,你将在2周后实际理解它。

另外我认为你的代码实际上有一个错误,nodeQ不应该是普通指针而不是双指针吗?如果您尝试取消引用(访问指针引用的内容)两次,则会出现seg错误。

这里是你应该如何初始化nodeQ的内容,假设它是一个单指针,在这个函数中我将在这次初始化它。

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




struct tree{

    int data;        
    struct tree *left,*right;    

};       


struct queue{

    struct tree * nodeQ;
    int front;    
    int rear;    

}; 



int main(void)
{
    struct queue my_queue;
    if(my_queue.nodeQ=malloc(sizeof(struct tree)))
        fprintf(stderr, "Unable to allocate memory for my_queue nodeQ\n");


    return 0;
}