3
我正在VisualStudio 2005中構建Qt 4.8.1,我遇到了編譯器無法找到的問題_fileno
。Qt,windows和_POSIX_
經過一番研究,我發現,在stdio.h它具有
#ifdef _POSIX_
_CRTIMP __checkReturn int __cdecl fileno(__in FILE * _File);
#else
_CRTIMP __checkReturn int __cdecl _fileno(__in FILE * _File);
#endif
我再通過Qt代碼看了一下,發現qfsfilengine_win.cpp和qfilesystemengine_win.cpp都有
#define _POSIX_
在我看來,這將是一個錯誤,如果我刪除這些行,它似乎建立成功。
有誰知道爲什麼這些文件會被定義爲_POSIX_
?
謝謝。
這不是一個錯誤,posix名稱已被棄用了很長時間。這些文件不會*定義*'_POSIX_',它們只是#if而已。看起來Qt採取了一種捷徑去嘗試解決這個問題。不要編輯編譯器頭文件,你會挖掘一個非常深的洞。 – 2012-04-03 20:08:33
qfsfilengine_win.cpp和qfilesystemengine_win.cpp都有#define _POSIX _。 stdio.h只是#如果是這樣,但我的問題是關於Qt cpp文件,它似乎有一個不正確的#define。 – Liron 2012-04-03 21:04:31
那麼,它在技術上在Windows上是不正確的,但這些是圖書館在需要支持多種平臺和編譯器時使用的那種黑客。你在問一個XY問題。你認爲Y是問題,但這不太可能是真正的問題。我們不知道X是什麼樣子。如果你想在你的代碼中使用'fileno'而不是'_fileno',那麼你可能沒有像你應該使用QSomething類。 – 2012-04-03 21:17:28