【问题标题】:What is wrong with this header file?这个头文件有什么问题?
【发布时间】:2017-04-07 12:48:31
【问题描述】:

我对@9​​87654323@ 还很陌生,并且开始学习头文件。在使用我的标题时,我收到一条错误消息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

【问题讨论】:

  • 您可能想阅读例如this readdir manual pagereaddir 返回什么? ent的类型是什么?
  • 如果这是一个标头,你绝对不希望这里有整个函数定义。将其移至 .c 文件或将其标记为 inline
  • @DeiDei inline 是什么?

标签: c pointers structure readdir


【解决方案1】:

我在这里读到 -> 的第二个参数必须是一个指针,

错了,“第一个”参数,或者实际上,-&gt; 运算符的操作数应该是指针类型的。

在您的情况下,ent 不是指针类型,因此您不能使用指针成员取消引用运算符-&gt;。 (您可以改用成员取消引用运算符 .)。

其实,在你的代码中,ent 应该是一个指针,根据readdir() 的返回类型。所以你最好把ent的类型改成struct dirent *,然后你就可以在ent上使用-&gt;了。

【讨论】:

  • 那么ent.d_name?
【解决方案2】:

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

如果您查看函数readdir,它会返回一个指向struct dirent 的指针,因此您的变量 ent 应该是一个指针 struct dirent *readdir(DIR *dirp);

struct dirent *ent;

这将解决您的错误invalid type argument of '-&gt;' (have struct dirent)

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 2013-02-17
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多