2011-04-11 20 views
13

हाय मैं QString करने के लिए एक std::wstring बदलने की आवश्यकता है और मैंरूपांतरण :: QString को wstring लिंकर त्रुटि फेंकता

std::wstring wideString; 
QString qtString = QString::fromStdWString(wideString); 

का सबसे स्पष्ट तरीका करने की कोशिश की मैं त्रुटि मिली:

Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class QString __cdecl QString::fromStdWString(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)" ([email protected]@@[email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@@Z)

referenced in function "public: void __thiscall FileHandler::deleteDir(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >&,int,unsigned int,bool,bool)" ([email protected]@@[email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@[email protected]) filehandler.obj

Error 3 fatal error LNK1120: 1 unresolved externals C:\Users\Documents\Visual Studio 2008\Projects\product_dev\deletefiles\Debug\FileHandler.exe

qstring temp = QString::fromWCharArray(const_cast<wchar_t*>(wideString.c_str()),wideString.size()); 

एर: मैं भी विधि QString::fromWCharArray उपयोग करने की कोशिश ROR मैं है

Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class QString __cdecl QString::fromWCharArray(wchar_t const*,int)" ([email protected]@@[email protected][email protected])

referenced in function "public: void __thiscall FileHandler::deleteDir(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >&,int,unsigned int,bool,bool)" ([email protected]@@[email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@[email protected]) filehandler.obj

Error 3 fatal error LNK1120: 1 unresolved externals C:\Users\Documents\Visual Studio 2008\Projects\product_dev\deletefiles\Debug\FileHandler.exe 1

मैं कैसे इस समस्या को हल करने के लिए आगे बढ़ना कर मिल सकता है?

उत्तर

17

संपादित अपने दृश्य स्टूडियो परियोजना सेटिंग्स और तहत C/C++ -> भाषा सेट विकल्प उपचार wchar_t नहीं को निर्मित प्रकार किया गया था।

+2

I, and a few other people इस त्रुटि को * No * पर सेट विकल्प के साथ मिला। यह इसे * हां * पर सेट कर रहा था जिसे संकलित करने की बात मिल गई, लेकिन यह सुनिश्चित नहीं है कि यह रनटाइम के दौरान भी काम करता है, या वास्तव में क्या बदलता है। – neuviemeporte

+2

@neuviemeporte चाहे विजुअल स्टूडियो सेटिंग "हां" या "नहीं" होनी चाहिए, जो कि क्यूटी लाइब्रेरी को संकलित करते समय उपयोग की गई सेटिंग पर निर्भर करता है। यदि आप निर्भरता वॉकर को फायर करते हैं और लिंकर त्रुटि में टाइप सूची के साथ निर्यात में प्रकार की सूची की तुलना करते हैं तो आपको एक मेलमिच ('wchar_t' बनाम' हस्ताक्षरित शॉर्ट') देखना चाहिए।आपको मिलान करने के लिए अपने आवेदन की सेटिंग समायोजित करना होगा। रन टाइम व्यवहार पर इसका कोई असर नहीं पड़ेगा; यह केवल संकलक को हल करने के लिए लिंकर के लिए एक उचित टाइप की गई आयात प्रविष्टि बनाने के लिए संकलक को निर्देश देता है। – IInspectable

+0

हाय, पुरानी पोस्ट लेकिन मुझे cpprest को जोड़ने के बाद qt निर्माता [qt 5.8.2] में एक ही त्रुटि मिल रही है। मैं क्यूटी निर्माता में ऐसी सेटिंग्स कहां सेट कर सकता हूं? – Hummingbird

-1

QtCore लाइब्रेरी आपके एप्लिकेशन में लिंक नहीं की जा रही है। अपनी प्रोजेक्ट सेटिंग्स जांचें और सुनिश्चित करें कि QtCore4.lib शामिल पुस्तकालयों की सूची में है और यह पथ इसे खोजने के लिए उचित रूप से सेट अप हैं।

1

यह तब भी हो सकता है जब QtCore4.lib सही ढंग से जुड़ा हुआ हो। सुनिश्चित करें कि वीएस विकल्प "प्रकार में निर्मित wchar_t का इलाज करें" बंद कर दिया गया है।

0

QT += core 
आप के लिए

.pro फ़ाइल जोड़ें। इसका परिणाम यह है कि दूसरा जवाब आपको क्या करने के लिए कहता है। (Qmake को फिर से चलाएं करना सुनिश्चित करें)

22

समस्या का सबसे अच्छा समाधान विकल्प "सेट wchar_t अंतर्निहित प्रकार था" विकल्प पर सेट करना है हालांकि कुछ मामलों में यह संभव नहीं हो सकता है।

उदाहरण के लिए xerces_c को wchar_t के साथ अंतर्निहित प्रकार के रूप में संकलित किया गया है। यदि आपको xerces_c दोनों का उपयोग करने की आवश्यकता है तो आपको एक सामान्य बिल्ट-इन प्रकार सेटिंग से मेल खाने के लिए क्यूटी या xerces_c को फिर से संकलित करना होगा।

विंडोज यूटीएफ 16 वर्णसेट का उपयोग करता है तो यूनिकोड तारों के लिए क्यूटी करता है। इस प्रकार, नीचे alternative solution जीवन बचतकर्ता हो सकता है।

/*! Convert a QString to an std::wstring */ 
std::wstring qToStdWString(const QString &str) 
{ 
#ifdef _MSC_VER 
    return std::wstring((const wchar_t *)str.utf16()); 
#else 
    return str.toStdWString(); 
#endif 
} 

/*! Convert an std::wstring to a QString */ 
QString stdWToQString(const std::wstring &str) 
{ 
#ifdef _MSC_VER 
    return QString::fromUtf16((const ushort *)str.c_str()); 
#else 
    return QString::fromStdWString(str); 
#endif 
} 
0

बढ़ावा :: फाइल सिस्टम :: पथ भी परियोजना की स्थापना "wchar में निर्मित प्रकार = हाँ के रूप में इलाज" की आवश्यकता के लिए लगता है, इसलिए vahapt के समाधान केवल एक ही मैं काम करने के लिए मिल सकता है था।

0

मुझे एक ही समस्या दिखाई दे रही थी लेकिन इनमें से कोई भी समाधान काम नहीं करता था। मुझे अंततः एहसास हुआ कि मैं विजुअल स्टूडियो 2017 के साथ संकलित था लेकिन विजुअल स्टूडियो 2013 के साथ संकलित क्यूटी से जुड़ा हुआ था। एक बार जब मैंने सही संस्करण चुना तो यह ठीक काम करता था।

संबंधित मुद्दे