2011-07-31 44 views
1

我試圖編譯這段代碼,它在Windows上工作得很好,在Linux(代碼::塊):無效的使用不完全類型「DIR」

/* Edit: Includes */ 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <dirent.h> 
#include <...> 
/**/ 

/* === */ 

/* Function code */ 
DIR *dp; 
dirent *ep; 
string name_parent; 

dp = opendir(somepath); 
name_parent = dp->dd_name; //error 
/**/ 

由於在Windows路徑名不區分我可以讀取像「c://程序文件」這樣的用戶輸入並獲取「正確」路徑「C:\ Program Files *」(除了星號 - 或「F://」 - >「F: *「)。我也使用這個變量來獲取絕對路徑值的目錄列表,因爲ep-> d_name(當然有一些readdir())返回相對於某個路徑的路徑。

在Linux上,我得到一個編譯錯誤( 「DP-> dd_name」):

error: invalid use of incomplete type 'DIR'

我是不是忘了什麼東西? 還是有邏輯錯誤?

編輯:我已經在上面添加了包含(我已經在使用)。

回答

0

顯然,DIR類型在您嘗試使用它的位置時未定義。也許你忘了#include

1

是的。你錯過了包括頭文件。

dirent.h 
2

您沒有聲明DIR的類型!在Posix系統上,您會說,

#include <sys/types.h> 
#include <dirent.h> 

但是,在Windows上,您沒有這些功能。相反,你可以使用Windows API filesystem functions

+3

或者使用boost ::文件系統的名稱存在。 –

+0

對不起 - 忘了提及它們(見編輯)。我已經在使用這些標題。它在Windows上工作。我想我很幸運Code :: Blocks呢? – basic6

1

DIR的內部結構是未指定的,因此您不應該依賴它並期望您的代碼具有便攜性。

用於Windows的巧舌如簧源說,這大約DIR

/* 
* This is an internal data structure. Good programmers will not use it 
* except as an argument to one of the functions below. 
3
/* Edit: Includes */ 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <dirent.h> 
#include <...> 
/**/ 

/* === */ 

/* Function code */ 
DIR *dp; 
dirent *ep; 
string name_parent; 

dp = opendir(somepath); 
ep = readdir(dp); 
name_parent = ep->d_name; 

/**/ 

變量d_name在結構中的dirent這給目錄

相關問題