任务很简单:使用typedef定义一个新类型,并让一个函数从文件中读出这种新类型的行,再次读出这个新类型的数组。所以我在headerfile中的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函数中使用。 并且这个错误以某种方式连接到我的main.c中的(在本例中)一个类型为playerEntry的指针的声明。因此,如果我没有声明它,那么没有错误,虽然我必须声明它实际上将它赋予函数。到目前为止,解决方案是如何将entries.h包含到readPlayerList.c中,这对以前的函数来说不是必需的?
我正在使用eclipse kepler和MinGW,如果是编译器问题。
更正了time.h中缺少的包含并稍微调整了代码。
答案 0 :(得分:0)
问题的一部分是编译器看到(至少)'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;
}
答案 1 :(得分: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_ */
你需要在readPlayerList.c中#include "entries.h"
//filename: readPlayerList.c
int readPlayerList(char *name, typePlayerEntry *feld) {
/* ^^^^^^^^^^^^^^^ from entries.h */
return 0;
}