问题标签 [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.
c++ - 删除类的复制构造函数时初始化类的数组成员
这是我正在处理的一个较小版本的用例。
编译此 VS 2015 Update 2 后会发出以下错误。
我环顾四周,我怀疑这可能是两个原因之一。
1) 复制构造函数成员 forstd::mutex
被删除
2)我认为这可能与我所看到的相似。
哪一个?我该怎么做才能绕过 VS 2015 Update 2 编译器抛出的这个错误?
更新:更新了构造函数,它接受了一些需要传递给的参数Foo_typedef
。
c++ - 错误 C1001:编译器发生内部错误
我在 C++ 模板任务中有一个虚函数,当它在 Visual Studio 2015 中编译时(我已经尝试了 Debug/Release 和 x86/x64 的所有组合),它在以下代码行中始终失败并出现编译器错误 C1001:
e_Ty
类的模板参数在哪里。此错误仅在我使用e_Ty
设置为的模板类时发生std::pair<const int &, int &>
。是否有正当理由为什么这不起作用,或者这是 MSVC 中的错误?
编辑
笔记:
l
是提前声明的(并作为函数调用的结果赋值)的局部变量。- 我尝试过使用禁用优化、使用
auto
和使用赋值式初始化,但都没有奏效。 e_Ty
当is时,代码编译得很好int
。
c++ - 为什么 FormatMessage 只为 ERROR_SYSTEM_PROCESS_TERMINATED 和 ERROR_UNHANDLED_EXCEPTION 系统错误创建部分消息?
我一直在使用 Windows API 中的 FormatMessage 函数从系统错误代码生成消息字符串。我注意到对于某些错误代码,似乎没有创建完整的消息。
以这个示例程序为例:
根据MSDN,我应该看到以下内容:
{致命系统错误}
%hs 系统进程意外终止,状态为 0x%08x (0x%08x 0x%08x)。系统已关闭。
但是,在示例程序中,我将看到:
{Fatal System Error}
%hs 系统进程意外终止,状态为 0x
我注意到这ERROR_UNHANDLED_EXCEPTION
也不会创建完整的消息(与 MSDN 上的列表相比)。两条预期消息都包含0x%08占位符,但消息在0x之后结束。
据我所见,其他错误消息似乎与 MSDN 上的列表相匹配(即问题似乎仅限于ERROR_UNHANDLED_EXCEPTION
and ERROR_SYSTEM_PROCESS_TERMINATED
)。
归功于 engf-010 - 如果您使用 Visual Studio 中的错误查找工具(工具 - 错误查找),您会得到相同的结果。错误代码为 574 和 591。
有谁知道为什么这些消息被裁剪?
反正有没有得到完整的信息?
c++ - 如何在 VC++ 中管理文件系统文件夹?
我喜欢我的文件夹结构来反映我的 C++ 命名空间结构(主要是为了避免文件名冲突),我喜欢在解决方案资源管理器中查看这个结构。后者我通过使用 VC++“过滤器”功能为每个文件夹创建一个过滤器(包括嵌套文件夹的嵌套过滤器)来完成。但是,维护这样的设置意味着每次创建或移动文件/文件夹时都会重复工作。有什么方法可以直接在解决方案资源管理器中查看和管理我的文件夹结构,就像在 VC# 中一样?
或者,如果我遇到XY 问题,有什么更好的方法来清晰地构建项目,避免各种名称冲突?
我已经在至少一个流行的 C++ 项目 (LibCinder) 中看到我的方法,但我想知道他们如何在不发疯的情况下管理它。:)
direct2d - Direct2D 色度键效果的正确语法
我正在尝试在位图上实现 Croma-Key 效果,我正在关注页面:https ://msdn.microsoft.com/en-us/library/windows/desktop/dn890715(v=vs.85 ).aspx
首先我注意到在将数组作为参数的实现中语法不正确,当我修复这个问题时,获取处理后图像的正确方法是不正确的,需要一些轮询来解决,最后,我仍然无法找到 m_d2dContext 是什么。我会假设它是 ID2D1HwndRenderTarget 但 intelesense 说没有方法定义:CreateEffect
我想知道是否有人在这方面取得了成功,并且可以展示和解释他们的代码。
c++ - VS2015用VC++ 2008工具集模板推演失败
重现问题的示例代码:
此代码使用 MS VC++2008 成功编译,VC++2015 使用 vc140 工具集,但在 VC++2015 项目中使用 vc90 (VC++2008) 工具集时编译失败。给出奇怪的诊断
推断 Func 的类型时,编译器似乎丢失了 __thiscall 调用约定说明符。试图在代码的不同部分强行指定 __thiscall 但没有成功。由于各种依赖关系,将整个项目转换为 vc14 工具集不是一种方法,并且将其保留在 VS 2008 下是一种不太可能的方法。有什么想法可以强制编译器理解这种结构吗?
更新
将代码更改为
并调用action< A >( &A::f );
工作,但看起来有点难看 - 我希望编译器能够自动推断两个模板参数(T和Func)的类型
c++ - MSVC 与 GCC 与 sizeof 的行为不一致
考虑以下代码:
GCC 编译它,只是警告未使用的变量。
然而,Visual C++ 2015 无法编译它:
线上
在StaticFunc()
.
另一行,s2 = ...
编译正常。s3 = ...
main()
这是 MSVC 中的错误,还是我在这里错过了一些基本的东西?
visual-c++ - 使用在不同时间/团队编译的同一 VS 中的 C++ DLL - ABI 兼容性?
重复一遍:我正在寻找相同Visual-C++ 版本的库之间的 ABI 兼容性!
我们希望混合和匹配来自不同团队的一些内部 C++ DLL——在不同时间使用不同的项目文件构建。由于构建时间长,我们确实希望避免大型单体构建,每个团队都重新编译另一个团队库的源代码。
当使用具有 C++ 接口的 C++ DLL 时,很 明显只有 在所有 DLL 都使用相同的编译器/Visual Studio 版本编译时才能执行此操作。
对我来说不太明显的是,要获得 ABI 兼容性,必须完全相同。
- 显然debug (
_DEBUG
) 和 release (NDEBUG
) 不能混合使用——但从它们链接到不同版本的共享运行时这一事实也很明显。 - 您是否需要完全相同的编译器版本,或者生成的 DLL 链接到相同的共享C++ 运行时是否足够——也就是说,基本上是相同的可再发行文件?(我认为传递完整的 C++ 对象时静态不会飞)
- 对于相同 vc++ 版本的两个 C++ DLL 是否需要相同
的编译器(和链接器)选项的文档化列表才能兼容?
- 例如,是否
/O
需要相同的开关——优化级别会影响 ABI 兼容性吗?(我很确定不是。) - 还是两个版本都必须使用相同的
/EH
开关? - 还是
/volatile:ms|iso
……?
- 例如,是否
本质上,我想提出一组(元)数据与描述其 ABI 兼容性的 Visual-C++ DLL 相关联。
如果存在差异,我目前只关注 VS2015。
visual-studio - Visual-C++-2017 二进制文件是否与 VC++-2015 兼容?
Steve 告诉我,VC 2015 和 VC 2017 实际上(将)是二进制兼容的。
我发现零信息。这在2017 (RC) 的发行说明中- 或者几乎任何地方,所以这里是:
- 使用VC++-2017二进制文件构建的 C++(C++ 接口)DLL 是否与VC ++-2015 构建的 DLL 兼容?
- 2017 和 2015 使用相同的(动态)运行时库吗?
- 如果是这样,Platform Toolset和? 之间的运行时差异是什么(如果有)?(*)
Visual Studio 2017 (v141)
Visual Studio 2015 (v140)
(*):是的,我实际上安装了 2017 RC,从表面上看,至少使用了相同的MSVCRT,即msvcp140.dll
和vcruntime140.dll
(尽管平台工具集被称为“v141”。
warnings - 如何设置 vc++ 项目的输出路径与其依赖项(nuget)不同?
前提
我有一个包含不同 VC++ 项目的 Visual Studio 2015 解决方案。
其中一些(EXE 和一些 DLL)将 $OutDir 设置为默认值“$(SolutionDir)$(Configuration)\”(即“C:\MySolution\Debug\”)。
对于其他一些项目(DLL),我需要将输出路径更改为“默认”$OutDir 的子目录(即“C:\MySolution\Debug\Pieces\”。
示例目录树:
约束
“片段”DLL 依赖于我无法修改的第三方 Dependency.dll(通过 NuGet 包)。
通常的解决方案
通常的方法是更改“pieces”项目的 $OutDir 项目设置,但这也会强制它们的依赖项在同一个子目录中输出。
这是不希望的,并且在整个解决方案的调试和打包中也产生了问题。
到目前为止
,我尝试了: 1. 使所有项目的 $OutDir 保持相同
2. 将“pieces” $TargetName 更改为“Pieces\$(ProjectName)”
这似乎有效(MyPiece*.dll 和 Dependency. dll 已正确放置且调试正常),但不幸的是 Visual Studio 会生成以下警告:
警告 MSB8012:TargetName(Pieces\MyPiece1.dll) 与链接器的 OutputFile 属性值 (MyPiece1) 不匹配。这可能会导致您的项目构建不正确。要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Link.OutputFile) 中指定的值匹配。
这个警告有点令人困惑,因为项目设置中的 %Link.OutputFile 看起来是正确的:
$(OutDir)$(TargetName)$(TargetExt) => C:\MySolution\Debug\Pieces\MyPiece1.dll
问题
解决我的问题的正确方法是什么?
如何强制 Visual Studio 在不同的路径中输出一些生成的文件,但仍然在“默认”$OutDir 中有它们的 Nuget 依赖项?
我已经搜索了网络和 StackOverflow,但我找不到合适的答案。
注意:我的问题与升级 VS2010 之前的解决方案无关(如微软官方注释中关于解决方案升级后警告 MSB8012并在 StackOverflow 上询问)。