- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
所以 Qt 在 windows 上是用/Zc:wchar_t- 编译的。这意味着 wchar_t 不是某些内部类型(我认为是 __wchar_t)的 typedef,而是 unsigned short
的 typedef .真正酷的是 MSVC 的默认设置是相反的,这当然意味着您使用的库很可能是用 wchar_t
编译的。与 Qt 的类型不同 wchar_t
.
当然,这不会成为问题,除非您尝试使用 std::wstring
之类的东西。在您的代码中;特别是当一个或多个库具有接受它作为参数的函数时。实际发生的情况是,您的代码可以愉快地编译,但随后无法链接,因为它正在使用 std::wstring<unsigned short...>
查找定义。但它们只包含期望 std::wstring<__wchar_t...>
的定义(管他呢)。
所以我做了一些网络搜索并找到了这个链接:https://bugreports.qt.io/browse/QTBUG-6345
根据 Thiago Macieira 的声明,“对不起,我们不会支持像这样构建 Qt”,我一直担心将 Qt 修复为像其他所有东西一样工作可能会导致一些问题,并一直试图避免它。我们使用/Zc:wchar_t- 标志重新编译了所有支持库,直到几天前我们开始尝试移植(我们正在从 Wx 切换到 Qt)一些序列化时,我们对此感到相当满意代码。
由于 win32 的工作方式,并且因为 Wx 只是包装了 win32,我们一直在使用 std::wstring
表示字符串数据,目的是使我们的产品尽可能为 i18n 做好准备。我们做了一些测试,当尝试打印特殊的东西时,Wx 不能使用多字节字符(即使不是像度数符号这样特殊的东西也是一个问题)。我不太确定 Qt 是否有这个问题,因为 QString 不仅仅是底层 _TCHAR 类型的包装器,而且还是某种 Unicode 怪物。
无论如何,boost 中的序列化库已经编译了部分。我们已经尝试使用/Zc:wchar_t- 重新编译 boost,但到目前为止,我们试图告诉 bjam 这样做的尝试都没有受到重视。我们陷入了僵局。
从我坐的地方,我有三个选择:
最佳答案
偶然发现了同样的问题......
显然 bjam 期望 cxxflags=-Zcwchar_t-
通过构建静态序列化库后bjam --with-serialization toolset=msvc-8.0 variant=debug threading=multi link=static cxxflags=-Zc:wchar_t-
一切都像预期的那样联系在一起。
希望这可以帮助任何人。
关于c++ - Qt、MSVC 和/Zc :wchar_t- == I want to blow up the world,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521252/
error C2440: 'initializing': cannot convert from 'TCHAR [260]' to 'std::basic_string,std::allocator>
首先。我想说,我不是 C++ 程序员。outlook 字符串在 visual studio 2015 中生成错误,并显示标题中的消息。 HWND windowHandle = (HWND)FindPr
我正在尝试检查一个 wchar_t * 是否等于另一个 wchar_t * 不区分大小写。有人可以把我放在正确的位置吗? 这是我尝试过的: wchar_t *vectored[80] = { ...
这是我的代码: wchar_t wbuffer[512]; wchar_t* wc = (wchar_t*) malloc(buffer_size); int buflen = 0;
如何正确转换这种方式? VARIANT varIndex; CString csIndex; //Index BSTR csIndex = (LPCSTR)(_bstr
我将以下代码作为我正在编写的字符串类中的私有(private)函数(它是从 wstring_convert “借来的”,并由我进行了一些修改): template std::string my_st
我有这样的东西: vector elements; 其中包含: 083938F8 083938FA 083938FC 083938FE 08393900 08393902 08393904 我想将它们
字符的签名不规范。因此,有signed char和unsigned char类型。因此,使用单个字符的函数必须使用既可以包含有符号字符又可以包含无符号字符的参数类型(此 类型选择为int),因为如果参
我在 Visual Studio C++ 2013 Community Edition 中遇到了一些奇怪的事情,这可能是编译器错误,也可能是我正在编写在没有警告的情况下进行编译的无效代码。 考虑以下片
我无法理解为什么某个隐式转换没有按我预期的那样工作。我有以下类(class) ref class ManagedWStringArrayWrapper { wchar_t** m_pointe
我有一个名为 DirToEmpty 的变量,它保存临时目录的路径。 我有另一个名为 TempBufDir 的变量,它将保持与 DirToEmpty 相同的值,但反斜杠被转义。 预期行为示例: wcha
我需要在附加 '\n' 后将多字节字符发送到套接字,但我拥有的是一个 const wchar_t*。我如何转换它? 最佳答案 如果您的问题是如何实际操作常量的内容,请考虑 const_cast . 关
我正在尝试使用语言环境方面将 wstring 转换为字符串,但我遇到了以下错误: test_facet.cpp: In function ‘int main()’: test_facet.cpp:14
我正在尝试使用 C++ 更改文件的属性我究竟做错了什么 ?代码完全拿下 https://learn.microsoft.com/en-us/windows/win32/stg/writeread-sa
我尝试将以下字符串数组传递给函数: const wchar_t *testTokens[] = { L"function", L"(",
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我尝试将阿拉伯字符存储为 wchar_t,然后将其打印到控制台,但无法使其工作。 我已将控制台设置为 UTF-8,如果我只是将阿拉伯字母输入控制台,它们就会正确显示(尽管未加入)。 我根据( How
我想存储一个包含扩展 ascii 表中字符的字符串,并打印它们。我尝试过: wchar_t wp[] = L"Росси́йская Акаде́мия Нау́к "; printf("%S", w
在C++ Visual Studio 2017中使用main函数是否错误如下: int main(int argc, wchar_t* argv[]) 因为我的程序可以接收特殊字符。 最佳答案 请阅读
我有这个运算符重载器。我的程序在创建新的 wchar_t 数组时崩溃。 myObject &operator += (const myObject &s) { wchar_t *cat = w
我是一名优秀的程序员,十分优秀!