C中不兼容指针类型的赋值

时间:2013-03-09 03:01:51

标签: c linked-list

我不断从不兼容的指针类型"得到#34;分配我无法弄清楚原因。我觉得它看起来不错。我只想尝试在C中执行链接列表的基础知识。

typedef struct{
   int id;
   struct node *next;
} node;

node *root = NULL; // Sets up a root node when the program starts.

create nodes(int id){
   if(root == NULL){
      root = (node*)malloc(sizeof(node));
      root-> id = -1;
      node *nextNode;
      nextNode = (node*)malloc(sizeof(node));
      nextNode -> id = id;
      root-> next = nextNode; // This line is throwing an error.
   }
}

我觉得这很简单,但我不能把手指放在上面......

3 个答案:

答案 0 :(得分:5)

你的struct实际上是一个未命名的struct typedef-d到node,但是你试图稍后将它称为struct node(这与你的node typedef)。快速修复就是简单地为结构命名:

typedef struct node {
   int id;
   struct node *next;
} node;

或者,如果您愿意(并且这是完全风格的),请删除typedef并更正对结构的其他引用:

struct node {
   int id;
   struct node *next;
};

struct node *root = NULL;

create nodes(int id){
   if(root == NULL){
      root = malloc(sizeof(struct node));
      root->id = -1;
      struct node *nextNode;
      nextNode = malloc(sizeof(struct node));
      nextNode->id = id;
      root->next = nextNode;
   }
}

答案 1 :(得分:2)

这里有四点:

首先。如果必须在结构的字段中包含指针,则添加struct node的名称(如上面指出的@JamesMcLaughlin)。例如:

typedef struct nodetag {     int id;     struct nodetag * next; } node;

二。确保您按预期使用变量类型create。我假设您的create或其他地方存在用户定义的变量类型#define。如果不是,这将导致编译器错误。即使你这样做了,也不会编译,因为你没有return return的{​​{1}}语句。

第三。在您的函数create中加入node *root = NULL;。否则,函数nodes将无法识别变量nodes并导致编译器错误。

四。在函数的开头声明局部变量。行root将导致compiler error for C89,因为C89不允许在语句后使用类型声明。但是,C99允许这种做法。建议在函数开头声明所有局部变量,使其与C89和C99兼容。

答案 2 :(得分:-1)

试试这个

struct node{
   int id;
   struct node *next;
} ;

struct node *root = NULL; // Sets up a root node when the program starts.

/* Return type is missing in your code*/ create_nodes(int id){
   if(root == NULL){
      root = (struct node*)malloc(sizeof(struct node));
      root-> id = -1;
      struct node *nextNode;
      nextNode = (struct node*)malloc(sizeof(struct node));
      nextNode -> id = id;
      root-> next = nextNode; // This line is throwing an error.
   }
}