函数不识别 typedef 参数

Function does not recognize typedef argument

好的,我已经搜索了大约两天的解决方案,但我找不到我的代码出了什么问题。 ;(

任务很简单:使用 typedef 定义一个新类型,并让一个函数将这个新类型的行从文件中读取到这个新类型的数组中。所以我在头文件中的 typedef 现在看起来像这样(我尝试了几种写法)

// filename: entries.h
#ifndef ENTRIES_H_
#define ENTRIES_H_
#include<time.h>

typedef struct{
    char Loginname[25];
    time_t RegDate;
    unsigned long Highscore;
    time_t Hdate;
}typePlayerEntry;

int readPlayerList(char *name, typePlayerEntry *feld);

#endif /* ENTRIES_H_ */

main.c:

//filename: main.c

#include <stdio.h>
#include "entries.h"


int main(void) {
    char name[13]="numbers.txt";
    typePlayerEntry *pep;

    readPlayerList(name, pep);

    return 0;
}

我的函数文件看起来像这样(这是显示错误的地方)

//filename: readPlayerList.c

int readPlayerList(char *name, typePlayerEntry *feld) {
return 0;
}

不相关的代码完全被排除在外。使用发布的代码可以重现该问题。

程序无法编译,因为无法识别函数文件中第二个参数的类型, - 这很奇怪,因为它在头文件中定义并且也可以在主函数中使用。 这个错误与我的 main.c 中的 playerEntry 类型指针的声明(在本例中)有某种关联。所以如果我不声明它,就没有错误,尽管我必须声明它才能实际将它提供给函数。为什么到目前为止的解决方案是将 entries.h 包含到 readPlayerList.c 中,而这对于以前的功能来说不是必需的?

我在 MinGW 中使用 eclipse kepler,以防编译器出现问题。

更正了 time.h 缺少的包含并稍微调整了代码。

部分问题是编译器看到(至少)两个不同的 meanings/definitions 'playerEntry' 名称。

建议: 1)去掉'typedef'语句 (这只会使代码混乱并混淆编译器)

2) 通过以下方式正确引用结构: 'struct playerEntry' 而不是 'playerEntry'

在 TheHeader.h 文件中:

struct playerEntry
{
    char Loginname[25];
    time_t RegDate;
    unsigned long Highscore;
    time_t Hdate;
};

int readPlayerList(char *name, struct playerEntry *feld);

在源文件中:

#include "TheHeader.h"
int readPlayerList(char *name, struct playerEntry *feld)
{
    return 0;
}

您在 entries.h 中缺少 #include <time.h>

// filename: entries.h
#ifndef ENTRIES_H_
#define ENTRIES_H_

typedef struct {
    char Loginname[25];
    time_t RegDate;                  /* from <time.h> */
    unsigned long Highscore;
    time_t Hdate;                    /* from <time.h> */
} playerEntry;

int readPlayerList(char *name, playerEntry *feld);

#endif /* ENTRIES_H_ */

并且您需要 #include "entries.h" 在 readPlayerList.c

//filename: readPlayerList.c

int readPlayerList(char *name, typePlayerEntry *feld) {
/*                             ^^^^^^^^^^^^^^^ from entries.h */
return 0;
}