C 这个头文件有什么问题?

C 这个头文件有什么问题?,c,pointers,structure,readdir,C,Pointers,Structure,Readdir,我对C相当陌生,并且开始学习头文件。在使用我的头时,我得到一个错误,说“->”的类型参数无效(have struct dirent)。我不明白这意味着什么,我读到->的第二个参数必须是指针,所以我尝试向它添加一个*(ent->*d_name),但是我得到了一个意外的错误标记*,我如何解决这个问题 #ifndef UTILIS_H_INCLUDED #define UTILIS_H_INCLUDED "utilis.h" #include <stdio.h> #include <

我对
C
相当陌生,并且开始学习头文件。在使用我的头时,我得到一个错误,说“->”的
类型参数无效(have struct dirent)
。我不明白这意味着什么,我读到
->
的第二个参数必须是指针,所以我尝试向它添加一个
*
ent->*d_name)
,但是我得到了一个意外的错误标记
*
,我如何解决这个问题

#ifndef UTILIS_H_INCLUDED
#define UTILIS_H_INCLUDED "utilis.h"
#include <stdio.h>
#include <dirent.h>

char *connect(const char *pattern)
{
    struct dirent ent;
    char *d_name;

    DIR *mgt = opendir("\\\\example\\windows7apps");

    while ((ent = readdir(mgt)) != pattern)
    {
        puts(ent->d_name);
    }
}

#endif
#如果包括使用费
#定义使用费,包括“使用费”
#包括
#包括
字符*连接(常量字符*模式)
{
结构导向;
char*d_名称;
DIR*mgt=opendir(“\\\\example\\windows7apps”);
while((ent=readdir(mgt))!=模式)
{
放置(ent->d_名称);
}
}
#恩迪夫
我在这里读到->的第二个参数必须是指针

这是错误的,“first”参数,或者实际上是
->
运算符的操作数应该是指针类型

在您的情况下,
ent
不是指针类型,因此不能使用指针成员取消引用运算符
->
。(您可以使用成员取消引用操作符


实际上,根据返回类型
readdir()
,在代码中,
ent
应该是指针。因此,您最好将
ent
的类型更正为
struct dirent*
,然后您可以在
ent

上使用
->
,通常头文件只包含数据定义和函数原型。您的函数定义几乎肯定应该在C文件中

如果查看函数
readdir
,它将返回指向
struct dirent
的指针,因此变量ent应该是指针 结构目录*readdir(目录*dirp)


这将修复错误“->”(have struct dirent)

您可能需要阅读的“->”的无效类型参数,例如。
readdir
返回什么?
ent
的类型是什么?如果这是一个标题,您肯定不希望在这里包含整个函数定义。将其移动到.c文件或将其标记为
inline
@DeiDei什么是
inline
?那么
ent.d_name
struct dirent *ent;