2011-02-15 5 views
13

Я пытаюсь использовать новые функции C++ 0x в Qt Creator под Windows (Qt Creator 2.0.1).C++ 0x с Qt Creator

Я прочитал нить Configuring the GCC compiler switches in Qt, Qt Creator, and QMake и добавил QMAKE_CXXFLAGS += -std=c++0x в .pro файл.

После этого Qt Creator дает мне очень странные ошибки на этом простом коде:

#include <memory> 

int main() 
{ 
} 

ошибки компилятора:

':: swprintf' не был объявлен

«:: vswprintf 'не был объявлен

Я пытаюсь скомпилировать свой код fr om в командной строке с командой g++ test.cpp --std=c++0x и получите такую ​​же ошибку.

Так что же случилось с Qt MinGW компилятором? Можно ли использовать функции C++ 0x в Qt Creator?

+1

Duplicate question: http://stackoverflow.com/questions/4713713/include-iostream-with-std-c0x-is-broken. Все, что вам нужно сделать, это прокомментировать 'using :: swprintf;' и 'using :: vswprintf;' в файле заголовка библиотеки - см. Патч, упомянутый в ответе ssmir. – TonyK

ответ

3

Прежде всего, возможно, что заголовки библиотеки просто не представляют свои зависимости должным образом. Попробуйте добавить #include <cstdio> и, возможно, (к сожалению) using namespace std; в свой файл вверху.

В противном случае у нескольких человек возникли проблемы с MinGW и swprintf. This mailing list post предлагает добавить следующее:

#ifdef WIN32 
#define swprintf _snwprintf 
#endif 

Смотрите, если это решит проблему. (Вы тоже хотите его в самой верхней части файла.)

Если предварительный случайный случай определяет ваш источник, кажется вам плохой идеей, я предлагаю использовать флаги сборки -D, чтобы условно ввести указанные выше определения, когда вы построенный на MinGW.

См. Также this short discussion о различиях между swprintf на MinGW и других компиляторах.

Наконец-то, если не все остальное, this link, кажется, приписывает проблему проблеме с флагами, которые разрешают __STRICT_ANSI__ в MinGW, и предлагает прокомментировать пару строк в одном из заголовков MinGW, чтобы исправить проблему. Я бы предложил добавить вместо них более простой #ifndef __STRICT_ANSI__, если вы решите пойти с этим взломом.

+0

Я добавляю '__STRICT_ANSI__' для ':: swprintf' и' :: vswprintf' и скомпилирован. Благодаря ;) – UmmaGumma