Как извлечь класс из struct dirent и использовать его для хранения результата из readdir()?

Итак, я вывел класс из struct dirent. Вот как выглядит мой заголовок производного класса: #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() и мой объект класса вышеупомянутого класса для его хранения. Таким образом, readdir() возвращает struct dirent*. Я попробовал все, но я не могу использовать свой объект класса для хранения результатов 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 является производным и работает, но по какой-то причине struct dirent не работает так, как я ожидаю. Что я сделал не так или я пытаюсь сделать то, что не следует делать?

Редактировать:

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

Код выше выдает ошибку во время компиляции, которая говорит:
Присвоение Direntry * из несовместимого типа struct dirent *

1 ответ

Решение
DIR* dir = opendir(path);    

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

Итак, я обнаружил, что вы можете преобразовать возвращаемое значение readdir() из struct dirent* в Direntry*, который является классом, производным от struct dirent

Другие вопросы по тегам