将std::wstring转换为QString会引发链接器错误
Conversion of std::wstring to QString throws linker error
Hi我需要将std::wstring
转换为QString
,我尝试了最明显的方法
std::wstring wideString;
QString qtString = QString::fromStdWString(wideString);
我得到了错误:
错误2错误LNK2019:未解析的外部符号
"__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 &)" (__imp_?fromStdWString@QString@@SA?AV1@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z)
在函数
"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)" (?deleteDir@FileHandler@@QAEXAAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@HI_N1@Z)
filehandler.obj 中引用错误3致命错误LNK1120:1个未解析的外部文件C:\Users\Documents\Visual Studio 2008\Projects\product_dev\deletefiles\Debug\FileHandler.exe
我还尝试使用QString::fromWCharArray
:方法
qstring temp = QString::fromWCharArray(const_cast<wchar_t*>(wideString.c_str()),wideString.size());
我得到的错误是
错误2错误LNK2019:未解析的外部符号
"__declspec(dllimport) public: static class QString __cdecl QString::fromWCharArray(wchar_t const*,int)" (__imp_?fromWCharArray@QString@@SA?AV1@PB_WH@Z)
在函数
"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)" (?deleteDir@FileHandler@@QAEXAAV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@HI_N1@Z)
filehandler.obj 中引用错误3致命错误LNK1120:1个未解析的外部文件C:\Users\Documents\Visual Studio 2008\Projects\product_dev\deletefiles\Debug\FileHandler.exe 1
如何解决此问题?
问题的最佳解决方案是将选项"Treat-wchar_twas Built-in Type"设置为否。然而,在某些情况下,这可能是不可能的。
例如,xerces_c是使用wchar_t作为内置类型编译的。如果需要同时使用xerces_c,则必须重新编译QT或xerces_ c以匹配常见的内置类型设置。
Windows使用UTF16字符集,QT也使用unicode字符串。因此,下面的替代解决方案可能是一个救命稻草。
/*! 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
}
编辑Visual Studio项目设置,并在C/C++->Language下,将选项Treat-wchar_twas Built-in Type设置为No。
如果QtCore4.lib链接正确,甚至可能发生这种情况。确保VS选项"将wchar_t视为内置类型"已关闭。
添加
QT += core
到您的.pro
文件。这导致了另一个答案告诉你要做什么。(一定要重新运行qmake(
boost::filesystem::path似乎还需要项目设置"将wchar视为内置type=yes",因此vahapt的解决方案是我唯一可以使用的解决方案。
我看到了类似的问题,但这些解决方案都不起作用。我最终意识到我是用Visual Studio 2017编译的,但链接到了用Visual Studio 2013编译的Qt。一旦我选择了正确的版本,它就工作得很好。
QtCore库没有链接到您的应用程序中。检查您的项目设置,并确保QtCore 4.lib在包含库的列表中,并且正确设置了路径来查找它。
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误