将链接列表节点插入升序排序单链接列表GCC错误:取消引用指向不完整类型的指针

时间:2012-09-27 17:58:26

标签: c gcc struct linked-list

我正在尝试将节点插入到按升序排序的链接列表中的正确位置(按顺序)。我一直收到GCC错误“错误:取消引用指向不完整类型的指针”。我一直在处理这个stackoverflow post中的代码。以下是我的代码:

typedef struct sNode  {         
   int sid;
   struct sNode *next;
 }sNode;

sNode* addsNode (struct sNode *headPtr, int pSid)    
{             
      struct sNode *ptr, *root = headPtr;          
      ptr = malloc (sizeof(struct sNode));         

      if(headPtr == NULL){ //In other code I've already check for a NULL list, pointer                        
             ptr->sid = pSid;
      }
      else{                 
           while(headPtr->next != NULL && headPtr->next->sid < pSid){                 
           //while(headPtr->next != NULL){   --> Compiles when uncommented

           headPtr = headPtr->next;                 
           }//while                 
           ptr->sid = pSid;   

      }//else

 return root;
}//addsNode

我正在尝试返回指向列表前面的指针,以便在返回后可以进行其他链接列表操作。我一直在研究StackOverflow,听起来它指的是导致问题的struct sNode。我已经看到使用typedef来声明结构的不同帖子。所以我尝试使用和不使用typedef来声明它。我也看过帖子暗示#including&amp;但那也不起作用。我正在使用GCC 4.6.3感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

typedef struct sNode  {         
   int sid;
   struct sNode *next;
 };

您必须typedef结构名称,

typedef struct sNode  {         
   int sid;
   struct sNode *next;
 } sNode;
例如,

。如果没有您输入的名称,它无论如何都是无效的,并且仍然必须使用struct关键字引用该类型。