所以我已经有很长一段时间了,似乎无法找到问题,甚至我的老师也找不到。
所以我有这个头文件:
#include <stdio.h>
#include <stdbool.h>
void print_list(void);
int delete_from_list(int iWordID);
wordData * create_list(int iWordID, char * cWord);
wordData * add_to_list(int iWordID, char * cWord, bool add_to_end);
wordData * search_in_list(int iWordID, struct wordData **prev);
void print_list(void);
typedef struct _wordData
{
int iWordID;
char * cWord;
struct _wordData *next;
} wordData;
在包含此标题的C文件中,我有这个功能:
wordData* create_list(int iWordID, char * cWord)
{
//printf(cWord);
printf("\n creating list with headnode as [%d] %s\n",iWordID,cWord);
wordData *ptr = (struct wordData*)malloc(sizeof(struct wordData));
if(NULL == ptr)
{
printf("\n Node creation failed \n");
return NULL;
}
ptr->iWordID = iWordID;
//char * temp = (char*)malloc(sizeof(cWord));
ptr -> cWord = cWord;
ptr->next = NULL;
head = curr = ptr;
return ptr;
}
所以当我编译时会发生这个错误: list.h | 6 |错误:在'*'标记之前预期'=',',',';','asm'或'属性'|
我已经搜索了一些关于这个错误的问题,但似乎找不到一个可以帮助我的人。
请帮助:)
答案 0 :(得分:14)
将wordData
struct
定义移到标题的顶部 - 它需要在您在原型中使用它之前(或者您需要转发声明它)。
#include <stdio.h>
#include <stdbool.h>
typedef struct _wordData
{
int iWordID;
char * cWord;
struct _wordData *next;
} wordData;
void print_list(void);
int delete_from_list(int iWordID);
wordData * create_list(int iWordID, char * cWord);
wordData * add_to_list(int iWordID, char * cWord, bool add_to_end);
wordData * search_in_list(int iWordID, struct wordData **prev);
void print_list(void);
答案 1 :(得分:8)
将结构定义移到头文件中使用的位置:
#include <stdio.h>
#include <stdbool.h>
typedef struct _wordData
{
int iWordID;
char * cWord;
struct _wordData *next;
} wordData;
void print_list(void);
int delete_from_list(int iWordID);
wordData * create_list(int iWordID, char * cWord);
wordData * add_to_list(int iWordID, char * cWord, bool add_to_end);
wordData * search_in_list(int iWordID, struct wordData **prev);
void print_list(void);
你必须在使用它之前定义它。
wordData * search_in_list(int iWordID, struct wordData **prev);
^
|
This is also incorrect. Should be "wordData **prev"
That's what the typedef is for.
答案 2 :(得分:1)
除了在您使用的点之前移动结构的定义之外,您还需要进行另一项更改:
您已将struct _wordData
明确指定为wordData
。
所以你使用struct _wordData
或wordData
,但是你使用的struct wordData
不存在。
答案 3 :(得分:1)
您的代码中存在两个独立错误。
首先,在使用之前,必须先定义typedef-name wordData
。
其次,在search_in_list
声明中,您引用struct wordData
类型。在您的程序中根本没有struct wordData
这样的类型。你改为struct _wordData
。然后在C文件中重复第二个错误(在malloc
等)。