Преобразование std:: wstring в QString вызывает ошибку компоновщика

Привет Мне нужно преобразовать 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

Как мне решить эту проблему?

Ответы

Ответ 1

Измените параметры проекта Visual Studio и в разделе C/С++ → Язык установите параметр Обработать wchar_t был встроенный тип до Нет.

Ответ 2

Лучшее решение проблемы - установить параметр "Обработать wchar_t был встроенным типом" на No. Однако в некоторых случаях это может быть невозможно.

Например, xerces_c скомпилирован с помощью wchar_t как встроенный тип. Если вам нужно использовать оба xerces_c, то вы должны либо перекомпилировать QT, либо xerces_c, чтобы соответствовать общей настройке встроенного типа.

В Windows используется кодировка UTF16, поэтому QT для строк unicode. Таким образом, альтернативное решение

Ответ 3

Это может случиться, если QtCore4.lib правильно связан. Убедитесь, что опция VS "Обработать wchar_t как встроенный тип" отключена.

Ответ 4

Добавить

QT += core

вам .pro. Это приводит к тому, что вам скажет другой ответ. (обязательно запустите qmake)

Ответ 5

boost:: filesystem:: path также, по-видимому, требует настройки проекта "обрабатывать wchar как встроенный тип = да", поэтому решение vahapt было единственным, с которым я мог бы работать.

Ответ 6

У меня была аналогичная проблема, но ни одно из этих решений не работало. В конечном итоге я понял, что компилирую Visual Studio 2017, но привязываюсь к Qt, скомпилированному с Visual Studio 2013. После того, как я выбрал правильную версию, он работал нормально.

Ответ 7

Библиотека QtCore не связана с вашим приложением. Проверьте настройки вашего проекта и убедитесь, что QtCore4.lib находится в списке включенных библиотек и что пути правильно настроены для его поиска.