2012-02-14 31 views
6

Tôi gặp một vấn đề rất lạ với stat.hC++ stat.h loại không đầy đủ và không thể xác định

Ở phía trên cùng của mã của tôi, tôi có tuyên bố:

#include <sys\types.h> 
#include <sys\stat.h> 

Và chức năng nguyên mẫu:

int FileSize(string szFileName); 

Cuối cùng, chức năng riêng của mình được quy định như sau:

int FileSize(string szFileName) 
{ 
    struct stat fileStat; 
    int err = stat(szFileName.c_str(), &fileStat); 
    if (0 != err) return 0; 
    return fileStat.st_size; 
} 

Khi tôi cố gắng để biên dịch mã này, tôi nhận được lỗi:

divide.cpp: In function 'int FileSize(std::string)': 
divide.cpp:216: error: aggregate 'stat fileStat' has incomplete type and cannot be defined 
divide.cpp:217: error: invalid use of incomplete type 'struct stat' 
divide.cpp:216: error: forward declaration of 'struct stat' 

Từ chủ đề này: How can I get a file's size in C? Tôi nghĩ rằng mã này nên làm việc và tôi không thể tìm ra lý do tại sao nó không biên dịch. Ai có thể nhận ra những gì tôi đang làm sai?

+1

Hệ điều hành và trình biên dịch? – mikithskegg

+0

Tôi gặp vấn đề tương tự mặc dù tôi sử dụng dấu phân cách đường dẫn chính xác. Tôi đang biên dịch với MinGW trên Windows và trình biên dịch có tệp sys/stat.h với cấu trúc stat và hàm được khai báo. Còn ý tưởng nào nữa không? – Youda008

Trả lời

5

\ của bạn có nghĩa vụ phải là / hoặc tôi chỉ nhầm lẫn về môi trường của bạn?

UNIX MAN page:

#include <fcntl.h> 
#include <sys/types.h> 
#include <sys/stat.h> 

int stat(const char *restrict path, struct stat *restrict buf); 

Nếu bạn đang ở trên Windows (mà tôi đoán bạn có thể là do các \ 's), sau đó tôi có thể không giúp đỡ vì tôi thậm chí còn không biết rằng có stat.

+1

là không cần thiết – mikithskegg

+0

Ah, vấn đề là \ thay vì/trong phần bao gồm của mã. Sau khi sửa chữa, vấn đề đã được giải quyết. – user788171