2013-04-24 31 views
0

我正在嘗試創建一個跨平臺的程序。我剛創建了一個類,並創建了一個獲取當前用戶路徑的函數。我想稍後使用該路徑。但不知何故,我得到這些錯誤:C++ Sys/Stat.h有錯誤?

「/usr/include/x86_64-linux-gnu/sys/stat.h:-1:在成員函數 '無效文件管理:: p_getfilepath()':」

「/usr/include/x86_64-linux-gnu/sys/stat.h:105:error:expected unqualified-id before string constant」

「/home/david/VocabularyTrainer/filemanager.cpp:31:error:預計「}」在輸入

的」結束者均基於31日線是在這裏的最後一行在此代碼:

void FileManager::p_getfilepath() 
{ 
#ifdef Q_OS_WIN32 
#include <windows.h> 
#endif 

#ifdef Q_OS_LINUX 
#include <sys/stat.h> 

struct passwd *p; 
uid_t uid; 

if ((p = getpwuid(uid = geteuid())) == NULL) 
{ 
    QMessageBox* mb; 
    mb->setText(""); 
    mb->exec(); 
    delete mb; 
} 
else 
{ 
    filepath = p->pw_dir; 
} 
#endif 
} 

任何人都知道什麼是錯的?我在linux mint上。

+1

你確定要包含一個頭文件*裏面有一個這樣的方法嗎?我幾乎可以肯定,結果不會很好。 – 2013-04-24 17:02:39

+0

如果它在linux或unix系統上,我只能包含該頭文件。 – 2013-04-24 17:05:28

+1

這很好,但你爲什麼要這樣做*內*方法? – 2013-04-24 17:05:55

回答

2

通過在裏包含你的頭文件你的類的功能,你可以將頭文件中的所有內容都作爲函數的一部分。

#ifdef Q_OS_WIN32 
#include <windows.h> 
#endif 

#ifdef Q_OS_LINUX 
#include <sys/stat.h> 
#endif 

void FileManager::p_getfilepath() 
{ 
#ifdef Q_OS_LINUX 

    struct passwd *p; 
    uid_t uid; 

    if ((p = getpwuid(uid = geteuid())) == NULL) 
    { 
     QMessageBox* mb; 
     mb->setText(""); 
     mb->exec(); 
     delete mb; 
    } 
    else 
    { 
     filepath = p->pw_dir; 
    } 

#endif 
}