这个 header 文件有什么问题?
What is wrong with this header file?
我是 C
的新手,正在开始学习 header 文件。在使用我的 header 时,我收到一条错误消息 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
I read here that the second argument to -> must be a pointer,
不对,"first"参数,或者说,->
运算符的操作数实际上应该是指针类型。
在您的例子中,ent
不是指针类型,因此您不能使用指针成员取消引用运算符 ->
。 (您可以使用成员取消引用运算符 .
代替 )。
实际上,在您的代码中,ent
应该是一个指针,根据 readdir()
的 return 类型。所以你最好将 ent
的类型更正为 struct dirent *
,然后你可以在 ent
.
上使用 ->
通常头文件只包含数据定义和函数原型。您的函数定义几乎肯定在 C 文件中。
如果你查看函数 readdir
它 returns 一个指向 struct dirent
的指针所以你的变量 ent 应该是一个指针
结构 dirent *readdir(DIR *dirp);
struct dirent *ent;
这将修复您的错误invalid type argument of '->' (have struct dirent)
我是 C
的新手,正在开始学习 header 文件。在使用我的 header 时,我收到一条错误消息 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
I read here that the second argument to -> must be a pointer,
不对,"first"参数,或者说,->
运算符的操作数实际上应该是指针类型。
在您的例子中,ent
不是指针类型,因此您不能使用指针成员取消引用运算符 ->
。 (您可以使用成员取消引用运算符 .
代替 )。
实际上,在您的代码中,ent
应该是一个指针,根据 readdir()
的 return 类型。所以你最好将 ent
的类型更正为 struct dirent *
,然后你可以在 ent
.
->
通常头文件只包含数据定义和函数原型。您的函数定义几乎肯定在 C 文件中。
如果你查看函数 readdir
它 returns 一个指向 struct dirent
的指针所以你的变量 ent 应该是一个指针
结构 dirent *readdir(DIR *dirp);
struct dirent *ent;
这将修复您的错误invalid type argument of '->' (have struct dirent)