这个头文件有什么问题?
我是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
我读到这里的第二个参数 - >必须是一个指针,
这是不对的, “第一” 的说法,或者,实际上,->
的操作数OPE rator应该是指针类型的。
在你的情况下,ent
不是一个指针类型,所以你不能使用指针成员解引用运算符->
。 (你可以使用成员解引用运算符.
代替)。
其实,在你的代码中,ent
应该是一个指针,按照返回类型readdir()
。因此,您最好将ent
的类型更正为struct dirent *
,然后您可以使用ent
上的->
。
那么'ent.d_name'? – jakehimton
@jakehimton nopes,查看更新。 –
通常头文件只包含数据定义和函数原型。你的函数定义应该几乎可以肯定在C文件中。
如果你看一下函数readdir
它返回一个指向struct dirent
让你变耳鼻喉科应该是一个指针 结构的dirent * READDIR(DIR * dirp);
struct dirent *ent;
这将解决您的错误invalid type argument of '->' (have struct dirent)
你可能想读例如[这个'readdir'手册页](http://man7.org/linux/man-pages/man3/readdir.3.html)。 'readdir'返回什么? 'ent'的类型是什么? –
如果这是一个头,你绝对不希望整个函数定义在这里。将其移动到.c文件或将其标记为“inline”。 – DeiDei
@DeiDei什么是'inline'? – jakehimton