问题标签 [visual-c++-2015]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4256 浏览

windows - _USING_V110_SDK71_ 不是从 VC++ 2015、v140_xp、Release 中的默认值继承的?

总结:编译Release版本的时候报Undeclared identifier SetDefaultDllDirectoriesfrom atlcore.h,但是编译Debug的时候就OK了。进一步的调查表明,_USING_V110_SDK71_扮演的角色。它应该继承自项目默认值(见下图),但不适用于组合:Release MinDependency 和 v140_xp。

详细信息:我正在将 C++ 本机 ATL 应用程序从 Visual C++ 2005 迁移到 Visual C++ 2015。目标是尽可能长时间地保持 Windows XP 运行版本。因此,为项目设置了 v140_xp 平台工具集。它适用于调试版本。但是,它会导致 Release MinDepency 版本的编译错误。使用 v140(不带 _xp)时,它编译得很好。

这是需要迁移的应用程序的一个分支。我已经成功将其他分支(更早的)迁移到了VC++ 2008、2010、2012和2013。(或者我忘了做某事,或者现在情况不同了。)

我已经看到其他地方也提到过这个错误;但是,原因可能不同。完整的错误行是:

有问题的行用于以下情况

因此,显然没有定义该符号。我正在使用 Visual Studio 2015 Professional,版本 14.0.23107.0 D14REL 和 Windows 8.1。

检查项目设置时,_USING_V110_SDK71_应定义符号——从项目默认值继承。

_USING_V110_SDK71_应该被定义!?

更新:输出窗口中的错误消息和周围的行:

你能解释一下吗?谢谢

0 投票
2 回答
4668 浏览

windows - C ++ 11 std :: cout <<“UTF-8中的字符串文字”到Windows cmd控制台?(视觉工作室 2015)

摘要:我应该怎么做才能将源代码中定义的以 UTF-8 编码 (Windows CP 65001) 存储的字符串文字正确打印到使用流的cmd控制台?std::cout

动机:我想修改优秀的Catch 单元测试框架(作为一个实验),以便它显示我的带有重音字符的文本。修改应该简单、可靠,并且对其他语言和工作环境也应该有用,以便作者可以接受它作为增强。或者,如果您知道 Catch 并且如果有其他解决方案,您可以发布吗?

详情:我们先从捷克版的“快棕狐……”开始吧

它打印以下内容(字体设置为 Lucida Console):在此处输入图像描述

默认编码为 852 ,cmd默认 windows 编码为 1250,源代码使用 65001 编码(带有 BOM 的 UTF-8)保存。SetConsoleOutputCP(1250);更改编码(以编程方式)的方式与更改cmd编码相同chcp 1250

观察:设置1250编码时,UTF-8字符串文字打印正确。相信是可以解释的,但是真的很奇怪。有什么体面的、人性化的、通用的方法来解决这个问题吗?

更新:在我的"narrow string literal"情况下使用 Windows-1250 编码存储(中欧的本地 Windows 编码)。它似乎与源代码的编码无关。编译器将其保存在windows 本机编码中。因此,切换cmd到该编码可以提供所需的输出。这很丑陋,但是我怎样才能以编程方式获取本机 Windows 编码(将其传递给SetConsoleOutputCP(cpX))?我需要的是一个对发生编译的机器有效的常量。它不应该是运行可执行文件的机器的本机编码。

也引入了 C++11 u8"the UTF-8 string literal",但似乎不适合SetConsoleOutputCP(CP_UTF8);

0 投票
1 回答
417 浏览

c++ - 在可变参数模板中使用对

好的,我正在尝试使用可变参数模板在 n 维中实现范围树。我有基本的设置工作,但我希望能够有选择地在模板列表中传递一个比较函数对象,以按 std::less 以外的东西对树进行排序。

我的第一个想法是,我可以使用包含一对作为第一个元素的版本来重载模板列表,其中包含类型和比较函数的对。但我看不到要编译模板声明行。Visual C++ (2015) 从 C2079 开始:“std::pair::first uses undefined class 'T'”。

无论如何,上代码。这是一个小片段来显示我正在尝试做的事情:

这一切正常。但是当我添加另一个版本的 rangetree 时,将一对作为第一个模板成员,我遇到了问题:

这是我似乎可以以编译器满意的方式格式化的部分。这个想法是可选地将模板成员与比较函数配对,如果应该使用更少的东西。

0 投票
2 回答
720 浏览

c++ - 为什么 static const char * 模板结构成员未初始化

我有一些 C++11 模板代码,我正在尝试移植到 Visual C++ Compiler 2015。原始代码工作得很好,但是我需要重写它以解决 constexpr 的问题。

原始代码(简化示例)

这打印:

但是,当我重写时,一些静态变量没有初始化。即使它编译得很好。

移植的代码(不工作)

这打印:

  1. 为什么会这样?

  2. 我该如何修复/解决它?

这可以在 Clang 和 Visual-C++ 中重现,但是 GCCFooBar::value = STRING也会在第二个示例中打印。

更新:工作解决方案

正如@serge-ballesta 所建议的那样。我更喜欢这个解决方案,因为它与原始代码非常相似。当 constexpr 成员添加到 VS 时,可以轻松应用和轻松删除。

0 投票
1 回答
597 浏览

c++ - Visual C++ 14 - 无法构建基于 Visual C++ 12 的简单线程程序

我有这个 MCVE

它建立在 VS 2013 Update 3 和Coliru 上,但不建立在 VS 2015 上,并带有以下错误列表:

如果不是 ,则std::ref此代码将编译。似乎是什么问题?

0 投票
1 回答
619 浏览

windows - How to set size and position of a MDI Client?

It seems like both size (x, y) and position (nWidth, nHeight) arguments are ignored when using CreateWindow. For example:

It's always aligned to the top-left corner and takes the parent's size, as shown below.

enter image description here

(We could see the difference since the window background is COLOR_WINDOW).

0 投票
1 回答
169 浏览

c++ - std::array 作为另一个标准容器的元素类型?

似乎没有任何规则反对它,我得到的错误

C2036 'std::array<int,0x08> *': unknown size

这是没有意义的。内部的代码<vector>正在推进内部end指针,该指针也用于其他地方(扩展的计算大小也是如此)。a 的大小struct{int x[8];}当然是“已知的”。

这里发生了什么?


嗯,因为它不仅仅是一个简单的错字或类似的错误,而且当其他人尝试它时似乎工作正常(并且其他人编写的示例对我有用!)我削减了源文件,直到除了有问题的语句之外什么都没有留下,它仍然失败。这是整个文件。预编译头文件已关闭。

我正在使用 x64 构建,发布构建。


弄清楚了:

这不是缺少#include for vector,而是 for array!它显然是在其他标题中前向声明的,但不完整。

0 投票
3 回答
189 浏览

c++ - 自动推导可以隐式添加常量吗?

考虑以下示例:

编译GCCCLANG会发出相同的错误,很可能是正确的:

错误:从“foo”类型的右值初始化“foo&”类型的非常量引用无效

然而,令我惊讶的是,它在 VC++2015 中编译并运行良好。

  • 这是VC++2015的bug吗?
  • 当语句呈现程序格式错误时,标准是否规定auto可以隐式添加const对象?
0 投票
1 回答
304 浏览

c++ - 如何在存在 VC++ 2015 整个程序优化的情况下正确地从 dll 公开接口

最近我们在我们的遗留代码中遇到了一个有趣的效果,即目前从 VS2010 移植到 VS2015。不幸的是,我无法创建一个小例子来展示这种效果,但我会尽可能准确地描述它。

我们有 2 个 dll(我将它们称为 dll A 和 dll B)。dll A 的项目定义了接口 IFoo 和派生接口 IFxFoo

在 dll B 中,使用了两个接口。

processFoo() 将被不同的 IFoo 实现调用。一些来自 dll A,一些来自 dll B。

现在发生的情况如下: - 如果我们在编译 dll B 时打开整个程序优化,函数 fill() 中对虚函数 GetSlot() 的调用会被 Visual C++ 反虚拟化。这导致我们的程序崩溃。如果我们要么

  • 整个程序优化
  • 填充优化转向
  • 或者用 __declspec(dllimport) / __declspec(dllexport) 标记我们的接口

我现在的问题是:

  • 我们的假设是否正确,因为优化器在 dll B 中只看到了 IFxFoo 的一个实现,并假设这是唯一的一个,因为 IFxFoo 没有被标记为来自不同的 dll?
  • 在头文件中创建“接口”的最佳方法是什么?我们曾经像上面那样做,但这似乎会导致一些问题。
  • 其他编译器(gcc / clang)是否表现出类似的行为?

感谢您的帮助托比亚斯

0 投票
2 回答
2445 浏览

c++ - Windows 上带有 libssh2 和 libopenssl 的 libgit2

我以前尝试过,但在完整构建中收效甚微,但即使现在也失败了,我显然在 Windows 上遗漏了一些东西(是的,它可能是 Windows:P)

有人可以带我过去吗

  1. 找到正确的 OpenSSL 以使用 libssh2 进行编译
  2. 实际上cmake /将libssh2编译到libgit2中,因为它一直说找不到libssh2,我正在努力再次构建它。

我正在使用 CMake gui For windows,试图构建一个 VC2015 项目

我在构建 libgit2 时遇到的错误是

即使我已经把它放在我认为它会看起来的每一个可能的地方,我也尝试过设置CMAKE_PREFIX_PATH

如果有人在 Windows 上成功完成了它,我将不胜感激一两个关于我做错了什么或应该做的事情

谢谢罗伯特