如何从 struct dirent 派生 class 并使用它来存储 readdir() 的结果?

How do I derive a class from struct dirent and use it to store result from readdir()?

所以我从 struct dirent 派生了一个 class。这是我派生的 class header 的样子: #ifndef Direntry_hpp #define Direntry_hpp

#include <dirent.h>
#include <iostream>

using namespace std;

class Direntry : public dirent{
private:
public:
     void print(ostream&);
     char* name(){ return d_name; }
     ino_t inode(){ return d_ino; }
     unsigned int type(){ return d_type; }
};

#endif /* Direntry_hpp */

所以在我的代码中,我尝试使用 readdir() 和我上面 class 的 class object 来存储它。所以 readdir() returns struct dirent*。我已经尝试了所有方法,但我无法使用 class object 来存储 readdir() 的结果。

for(;;){
    //I want to say Direntry *dirEntry but it doesn't work when I try to store the result of readdir().
    struct dirent* dirEntry; 
    if((dirEntry = readdir(dir)) == nullptr) break;
    if(params.vFlag && dirEntry->d_type != DT_REG){
        cout << setw(12) << dirEntry->d_ino << left << dirEntry->d_name << endl;
    } else if(dirEntry->d_type == DT_REG){
       cout << setw(12) << dirEntry->d_ino << left << dirEntry->d_name << endl;
       Stats stat; //This class is derived from stat in the <sys/stat.h> library and it works.
       if(lstat(path, &stat)) fatal("lstat error");
    }
}

因此 Stat class 派生自并且它有效,但由于某些原因,struct dirent 没有按照我预期的方式工作。我做错了什么或者我在尝试做一些不应该做的事情?

编辑:

Direntry* dirEntry;
if((dirEntry = readdir(dir)) == nullptr) break;

上面的代码在编译时产生一个错误:
从不兼容的类型 'struct dirent *'

分配给 'Direntry *'
DIR* dir = opendir(path);    

for(;;){
    Direntry* dirEntry;
    if((dirEntry = (Direntry*)readdir(dir)) == nullptr) break;
    ...
}

所以我发现您可以将 readdir() 的 return 值从 struct dirent* 转换为 Direntry*,这是从 struct dirent

派生的 class