2012-11-28 62 views
0

所以我已经有很长一段时间了,似乎无法找到问题,甚至我的老师也无法找到它。编译C时出现奇怪的错误

所以我有这个头文件:

#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; 
    } 

所以,当我编译出现此错误: 名单.h | 6 |错误:在'*'标记之前预计'=',',',';','asm'或'attribute'

我在这个错误上搜索了一些awnsers,但似乎找不到帮助我的人。

请帮助:)

+5

谁是这位老师? :-P – jedwards

+0

让我想起我的老师lol –

+0

哈哈我知道,thnx迈克尔伯尔。我习惯于OO编程,这是必需的。 – flexzican

回答

14

移动wordDatastruct定义顶端FO的标题 - 它需要拿出你的原型使用它之前(或者你需要转发声明它)。

#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); 
+0

(这只是你头文件中组件的重新洗牌) – jedwards

+0

谢谢亲切的先生! – flexzican

+1

@flexzican:虽然这不是全部。即使编译器一开始可能不会抱怨,您仍然可以在'search_in_list'声明中引用不存在的类型'struct wordData'。你的类型叫做'struct _wordData'或者简单的'wordData',但是没有'struct wordData'这样的东西。注意区别?然后在实现文件中重复相同的错误。 – AnT

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. 
1

除了你在哪里使用有你需要的另一个变化点之前移动结构的定义:

你通过typedef struct _wordDatawordData

因此,您使用struct _wordDatawordData,但您使用struct wordData哪些不存在。

1

你的代码有两个独立的错误。

首先,typedef-name wordData必须在使用之前定义为

其次,在search_in_list声明中您可以参考struct wordData类型。在你的程序中根本没有struct wordData这样的类型。改为您有struct _wordData。第二个错误然后在C文件中重复(在malloc等)。