struct DIR的前向声明
forward declaration of struct DIR
我把include弄乱了,但没能找到错误:
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#ifdef DEBUG
#define DLOG(x) printf(x)
#define PLOG(x,y) printf(x,y)
#else
#define DLOG(x)
#define PLOG(x,y)
#endif
harddrive::Results* harddrive::search_for(char* start,char* target,char** ignore,int size) {
PLOG("work directory: %s",start);
DIR* curr_dir = opendir(start);
Results* local = new Results;
if(!curr_dir) {
printf(" opendir() failure, probably no real directory: %s",start);
errno = 0;
return NULL;
}
struct dirent* elem;
while( (elem = readdir(curr_dir)) ) {
//form URI
char* uri = form_uri(start,curr_dir->d_name); //here is the actual error
struct stat st;
lstat(elem->d_name,&st);
if( S_ISDIR(st.st_mode) ) {
if( !do_ignore(uri,ignore,size) )
local = merge(local,search_for( form_uri(start,elem->d_name), target,ignore,size));
}
else if( S_ISREG(st.st_mode) ) { //this is line 41
编译器输出:Directory.cpp: In function ‘harddrive::Results* harddrive::search_for(char*, char*, char**, int)’:
Directory.cpp:34:38: error: invalid use of incomplete type ‘struct DIR’
/usr/include/dirent.h:128:16: error: forward declaration of ‘struct DIR’
curr_dir->d_name
应为elem->d_name
。
如错误所示,您错误地试图解引用指向不透明类型DIR
的指针。
DIR*是一个不透明句柄,你不能访问它的内部。您可能想访问elem
而不是curr_dir
。把
form_uri(start,curr_dir->d_name);
form_uri(start,elem->d_name);
dirent.h says:
/* This is the data type of directory stream objects.
The actual structure is opaque to users. */
typedef struct __dirstream DIR;
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 在UNIX系统中使用DIR查找文件的字节大小
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在函数内部的声明中初始化数组,并在外部使用它
- Visual Studio中的函数声明和函数定义问题
- struct DIR的前向声明