Ответ 1
Измените параметры проекта Visual Studio и в разделе C/С++ → Язык установите параметр Обработать wchar_t был встроенный тип до Нет.
Привет Мне нужно преобразовать 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 &)" ([email protected]@@[email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@@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)" ([email protected]@@[email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@[email protected])
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)" ([email protected]@@[email protected][email protected])
ссылка в функции
"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Ошибка 3 фатальной ошибки LNK1120: 1 нерешенные внешние элементы C:\Users\Documents\Visual Studio 2008\Projects\product_dev\deletefiles\Debug\FileHandler.exe 1
Как мне решить эту проблему?
Измените параметры проекта Visual Studio и в разделе C/С++ → Язык установите параметр Обработать wchar_t был встроенный тип до Нет.
Лучшее решение проблемы - установить параметр "Обработать wchar_t был встроенным типом" на No. Однако в некоторых случаях это может быть невозможно.
Например, xerces_c скомпилирован с помощью wchar_t как встроенный тип. Если вам нужно использовать оба xerces_c, то вы должны либо перекомпилировать QT, либо xerces_c, чтобы соответствовать общей настройке встроенного типа.
В Windows используется кодировка UTF16, поэтому QT для строк unicode. Таким образом, альтернативное решение
Это может случиться, если QtCore4.lib правильно связан. Убедитесь, что опция VS "Обработать wchar_t как встроенный тип" отключена.
Добавить
QT += core
вам .pro
. Это приводит к тому, что вам скажет другой ответ. (обязательно запустите qmake)
boost:: filesystem:: path также, по-видимому, требует настройки проекта "обрабатывать wchar как встроенный тип = да", поэтому решение vahapt было единственным, с которым я мог бы работать.
У меня была аналогичная проблема, но ни одно из этих решений не работало. В конечном итоге я понял, что компилирую Visual Studio 2017, но привязываюсь к Qt, скомпилированному с Visual Studio 2013. После того, как я выбрал правильную версию, он работал нормально.
Библиотека QtCore не связана с вашим приложением. Проверьте настройки вашего проекта и убедитесь, что QtCore4.lib находится в списке включенных библиотек и что пути правильно настроены для его поиска.