2011-02-15 13 views
13

के साथ मैं विंडोज़ (क्यूटी निर्माता 2.0.1) के तहत Qt Creator में नई सी ++ 0x सुविधाओं का उपयोग करने की कोशिश कर रहा हूं।सी ++ 0x क्यूटी निर्माता

मैंने धागा Configuring the GCC compiler switches in Qt, Qt Creator, and QMake पढ़ा और QMAKE_CXXFLAGS += -std=c++0x को .pro फ़ाइल में जोड़ा।

यह बाद क्यूटी निर्माता इस सरल कोड पर मुझे बहुत ही अजीब त्रुटियों देता है:

#include <memory> 

int main() 
{ 
} 

संकलक त्रुटियों:

':: swprintf'

घोषित नहीं किया गया है ':: vswprintf 'घोषित नहीं किया गया है

मैं अपना कोड fr संकलित करने का प्रयास करता हूं आदेश g++ test.cpp --std=c++0x के साथ कमांड लाइन ओम और एक ही त्रुटि प्राप्त करें।

तो क्यूटी MinGW कंपाइलर के साथ क्या गलत है? क्या क्यूटी निर्माता में सी ++ 0x फीचर्स का उपयोग करना संभव है?

+1

डुप्लिकेट प्रश्न: http://stackoverflow.com/questions/4713713/include-iostream-with-std-c0x-is-broken। आपको बस इतना करना है कि 'swprointf का उपयोग करके' और ':: ::wwprintf का उपयोग करना;' लाइब्रेरी हेडर फ़ाइल में - ssmir के उत्तर में वर्णित पैच देखें। – TonyK

उत्तर

3

सबसे पहले, यह हो सकता है कि लाइब्रेरी हेडर बस अपनी निर्भरताओं का सही ढंग से प्रतिनिधित्व न करें। शीर्ष पर अपनी फ़ाइल में #include <cstdio> और शायद (दुर्भाग्य से) using namespace std; जोड़ने का प्रयास करें।

विफल होने के कारण, कई लोगों को मिनजीडब्ल्यू और स्विप्रिंट के साथ समस्याएं प्रतीत होती हैं। This mailing list post इस जोड़ने का सुझाव:

#ifdef WIN32 
#define swprintf _snwprintf 
#endif 

देखें कि क्या इससे समस्या। (आप इसे फ़ाइल के शीर्ष पर भी चाहते हैं।)

यदि आपके स्रोत को यादृच्छिक परिभाषित करना आपके लिए एक बुरा विचार प्रतीत होता है, तो मैं सुझाव देता हूं कि -D सशर्त रूप से उपरोक्त इंजेक्ट करने के लिए झंडे का निर्माण करें, जब आप हों MinGW पर निर्माण।

अन्य कंपेलरों पर swprintf के बीच अंतर पर this short discussion भी देखें।

अंत में, और सब में नाकाम रहने, this link झंडे कि MinGW में __STRICT_ANSI__ सक्षम जुड़ी किसी समस्या के समस्या का श्रेय देने लगता है, और MinGW हेडर समस्या को हल करने में से एक में लाइनों की एक जोड़ी बाहर टिप्पणी पता चलता है। यदि आप इस हैक के साथ जाने का फैसला करते हैं तो मैं उनके चारों ओर एक सरल #ifndef __STRICT_ANSI__ जोड़ने का सुझाव दूंगा।

+0

मैं ':: swprintf' और ':: vswprintf' के लिए' __STRICT_ANSI__' जोड़ता हूं और यह संकलित है। धन्यवाद ;) – UmmaGumma