Что не так с этим заголовочным файлом?
Я довольно новичок в C
и начинаю изучать заголовочные файлы. При использовании моего заголовка я получаю сообщение об ошибке invalid type argument of '->' (have struct dirent)
, Я не понимаю, что это значит, я прочитал здесь, что второй аргумент ->
должен быть указатель, поэтому я попытался добавить *
к нему (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
2 ответа
Я прочитал здесь, что второй аргумент -> должен быть указателем,
Это неправильно, "первый" аргумент, или, на самом деле, операнд ->
оператор должен иметь тип указателя.
В твоем случае, ent
не является типом указателя, поэтому вы не можете использовать оператор разыменования члена указателя ->
, (вы могли бы использовать оператор разыменования члена .
вместо).
На самом деле, в вашем коде, ent
должен быть указателем, в соответствии с типом возвращаемого значения readdir()
, Так что лучше исправь тип ent
быть из struct dirent *
тогда вы можете использовать ->
на ent
,
Обычно заголовочные файлы содержат только определения данных и прототипы функций. Ваше определение функции почти наверняка должно быть в файле C.
Если вы посмотрите на функцию readdir
он возвращает указатель на struct dirent
поэтому ваша переменная ent должна быть указателем struct dirent *readdir(DIR *dirp);
struct dirent *ent;
Это исправит вашу ошибку invalid type argument of '->' (have struct dirent)