我是C
的新手,我开始学习头文件。在使用我的标题时,我收到错误invalid type argument of '->' (have struct dirent)
。我不明白这意味着什么,我读here ->
的第二个参数必须是指针,所以我尝试向其添加*
(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
答案 0 :(得分:3)
我在这里读到第二个参数 - &gt;必须是指针,
那是错的,&#34;第一&#34;参数,或者,实际上,->
运算符的操作数应该是指针类型。
在您的情况下,ent
不是指针类型,因此您不能使用指针成员解除引用运算符->
。 (您可以使用成员解除引用运算符.
代替)。
实际上,在您的代码中,ent
应该是一个指针,根据readdir()
的返回类型。因此,您最好将ent
的类型更改为struct dirent *
,然后您可以在->
上使用ent
。
答案 1 :(得分:3)
通常头文件只包含数据定义和函数原型。您的函数定义几乎肯定应该在C文件中。
如果查看函数readdir
,它会返回一个指向struct dirent
的指针,所以你的变量ent应该是一个指针
struct dirent * readdir(DIR * dirp);
struct dirent *ent;
这将解决您的错误invalid type argument of '->' (have struct dirent)