Как извлечь класс из 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