2012-04-03 5 views
3

Я работаю над созданием Qt 4.8.1 в VisualStudio 2005, и у меня возникла проблема с тем, что компилятор не смог найти _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 

Я посмотрел через кварт кода и обнаружили, что qfsfilengine_win.cpp и qfilesystemengine_win.cpp оба имеют

#define _POSIX_ 

Мне кажется, что это было бы ошибкой, и если я удалю эти строки, это, похоже, будет успешным.

Кто-нибудь знает, почему эти файлы будут определять _POSIX_?

Спасибо.

+1

Это не ошибка, имена posix устарели долгое время. Эти файлы не определяют * '_POSIX_', они просто #if. Похож на то, что Qt взял короткий вызов, чтобы попытаться решить проблему. Не редактируйте файлы заголовков компилятора, вы выкопаете себе действительно глубокую дыру. –

+1

qfsfilengine_win.cpp и qfilesystemengine_win.cpp обе имеют #define _POSIX _ в них. stdio.h просто # если это так, но мой вопрос касается файлов Qt cpp, которые, похоже, имеют неправильный #define. – Liron

+1

Ну, это технически некорректно в Windows, но это те хаки, которые используют библиотеки, когда им нужно поддерживать несколько платформ и компиляторов. Вы задаете XY-вопрос. Вы предполагаете, что Y - проблема, но вряд ли это реальная проблема. Мы не представляем, как выглядит X. Если вы хотите использовать 'fileno' в своем коде вместо' _fileno', то вы, вероятно, не используете класс QSomething, как вы должны. –

ответ

1

Кажется, что это действительно ошибка в Qt. Если вы создаете Qt для Windows без предварительно скомпилированных заголовков, и вы столкнулись с этой проблемой, просто удалите вызовы #define _POSIX_ в qfsfilengine_win.cpp и qfilesystemengine_win.cpp, и он будет успешно создан.