Visual Studio C++ 2015 std::codecvt mit char16_t oder char32_t
Dieser code kompiliert OK unter VS2013:
std::string Unicode::utf16_to_utf8(std::u16string utf16_string)
{
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
return convert.to_bytes(utf16_string);
}
Nun mit VS2015 ich bekommen:
1>unicode.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: static class std::locale::id std::codecvt<char16_t,char,struct _Mbstatet>::id" (__imp_?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A)
connect.microsoft.com/VisualStudio/feedback/details/1403302/...
Ja, ich habe schon danach gegoogelt, irgendwelche Lösungen?
hast du eine Lösung oder einen workaround?
Ja, ich habe schon danach gegoogelt, irgendwelche Lösungen?
hast du eine Lösung oder einen workaround?
InformationsquelleAutor user3443139 | 2015-08-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alte Frage, aber für die Zukunft Referenz: dies ist ein bekannter bug in Visual Studio 2015, wie schon im letzten Beitrag (der 7. Januar 2016) in dieser thread der MSDN Social.
Den workaround für dein Beispiel sieht so aus (ich umgesetzt habe Ihre Methode als eine freie Funktion für Einfachheit):
Hoffentlich das problem behoben wird in zukünftigen Versionen, da sonst die
#if
Zustand benötigen, verfeinern.UPDATE: Nein, noch nicht behoben, VS 2017. Also, ich habe aktualisiert die Präprozessor-bedingte auf
>= 1900
(zunächst war== 1900
).Das funktionierte für mich. Wie etwa die entgegengesetzte Richtung? Wenn ich ein auto p = reinterpret_cast<const char *>(utf8_string.Daten()); und konvertieren.from_bytes(p) anstelle, bekomme ich, dass "kein passender Benutzer-definierte Umwandlung von "std::basic_string<int16_t, std::char_traits<int16_t>, std::allocator<int16_t>>" "std::u16string" existiert"
gefunden eine ähnliche Lösung, und es ist Umgekehrt auf einer antlr-fix. aber nicht optimal, weil zwei Konvertierungen : github.com/antlr/antlr4/commit/...
noch nicht behoben, VS 2019 Vorschau.
InformationsquelleAutor JPNotADragon
Definieren, die das fehlende symbol in einer cpp-Datei.
In der Tat ist es nicht kompilieren mit /MD, weil die ausländischen DLL hätte keine Möglichkeit zu wissen,/mit unserer definition. Es funktioniert mit /MT obwohl. So ist es nur die Hälfte ein workaround 🙂
InformationsquelleAutor pascalx
Andere mögliche Problemumgehung ist die Verwendung von Standard-zweite template-parameter (wchar_t) für wstring_convert. Es ist für die Arbeit "MS Visual Studio 2015 update 3". Bitte beachten Sie, dass es nicht Plattform-unabhängig Lösung. Nur Windows.
Okay gefunden habe:
int32_t
funktioniert 🙂es wird funktionieren, aber nicht eine optimale Lösung.
InformationsquelleAutor aleksandrm8
Dieser arbeitete für mich in VS2017:
InformationsquelleAutor Paul Williams