0

所以我在这个问题上已经有一段时间了,似乎找不到问题,甚至我的老师也找不到。

所以我有这个头文件:

    #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|error: expected '=', ',', ';', 'asm' or ' attribute ' before '*' token|

我已经搜索了很多关于这个错误的 awnsers,但似乎找不到可以帮助我的错误。

请帮忙 :)

4

4 回答 4

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);
于 2012-11-28T15:18:38.220 回答
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. 
于 2012-11-28T15:19:16.100 回答
1

除了在您使用的点之前移动结构的定义之外,您还需要进行另一项更改:

您已键入定义struct _wordDatawordData.

所以你要么使用struct _wordDataor wordData,但你正在使用struct wordDatawhich 不存在。

于 2012-11-28T15:23:18.907 回答
1

您的代码中有两个独立的错误。

首先,typedef-namewordData必须在使用定义。

其次,在search_in_list声明中您指的是struct wordData类型。您的程序中根本没有这种类型struct wordData。你有struct _wordDatamalloc然后在 C 文件(等)中重复第二个错误。

于 2012-11-28T15:24:44.240 回答