Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更新visual studio 2017,现在出现编译错误C7510:&x27;回调';:依赖模板名称的使用必须以';模板&x27;_C++_Windows_Visual Studio_Wrl - Fatal编程技术网

C++ 更新visual studio 2017,现在出现编译错误C7510:&x27;回调';:依赖模板名称的使用必须以';模板&x27;

C++ 更新visual studio 2017,现在出现编译错误C7510:&x27;回调';:依赖模板名称的使用必须以';模板&x27;,c++,windows,visual-studio,wrl,C++,Windows,Visual Studio,Wrl,更新后(15.8.0),我试着像往常一样编译我的项目。我将showincludes设置为yes以找出错误的来源,但这都是系统代码。从stdafx.cpp开始,它经历了所有的include和errors out: 以前有人见过这个吗?我上下搜索,想找到一个没有用的答案。没有修改windows sdk,不知道该做什么 编辑: 在我安装的windows SDK中,错误在文件中- C:\ProgramFiles(x86)\Windows工具包\10\Include\10.0.17134.0\winrt\

更新后(15.8.0),我试着像往常一样编译我的项目。我将showincludes设置为yes以找出错误的来源,但这都是系统代码。从stdafx.cpp开始,它经历了所有的include和errors out:

以前有人见过这个吗?我上下搜索,想找到一个没有用的答案。没有修改windows sdk,不知道该做什么

编辑: 在我安装的windows SDK中,错误在文件中-

C:\ProgramFiles(x86)\Windows工具包\10\Include\10.0.17134.0\winrt\wrl\event.h

更改了第316行:returndelegatehelper::Traits::Callback(Details::Forward(Callback))

to:返回DelegateHelper::Traits::模板回调(Details::Forward(Callback))

第324行:返回DelegateHelper::Traits::Callback(

返回DelegateHelper::Traits::模板回调(Details::Forward(Callback))


由于修改sdk并不是真正的解决方案,因此Peng Du的解决方案是在配置窗口中选择非一致性。

当您使用依赖模板名称时,例如:

foo.template bar<T>();
foo.template bar();

直到有一刻,MSVC对使用
typename
template
消歧器并不严格,但经过一次更新后,规则发生了变化。

我有一些遗留项目,我并排比较了项目设置,最后通过设置:
配置属性
成功地构建了新项目++
一致性模式=否

问题出在Windows运行时库中,对Visual Studio的某些更改破坏了它。我的笔记本电脑也有同样的问题,它已更新为15.8.2,我在家运行早期版本的机器无法做到这一点,因为在我的电脑上编译的代码完全相同另一台机器,它一定是VS中的一个bug,或者WRL/event类中需要的一个更改


编辑:修复上面的返回值已成功,SDK中存在错误,您不应禁用/允许-因为这样可以针对Spectre和其他安全增强提供保护。

“从stdafx开始”-为了一个惊喜更少的构建,可能已经摆脱了这个错误。继续往下看。我会检查它们。更新后,错误似乎来自子项目DirectXTK12。这可能是工具包源代码中的错误,而不是sdk中的错误。@JesperJuhl:这不会真的有帮助。这不是主要的魔法。此外,专业版问题存在于SDK头中,如果您需要它,您就需要它。如何包含头(通过stdafx.h或直接)这并不重要。DirectXTK库的作者已经承认了这一点。这就是解决方案。只需找到错误的来源…lol。它会显示行号。检查有什么。也许你应该更新这些标题或使用编译器开关来临时恢复旧的解析模式。两者都没有SDK或编译器中存在错误。编译器中发生的变化是,15.8.0引入了两阶段名称查找。您可以使用编译器选项禁用两阶段名称查找。
/permission-
自动选择两阶段名称查找。您可以组合两个标志,使编译器与WRL源代码一致。
/permissiVE < /COD>与防范Simele无关。好的附加信息。也请检查这个博客关于减轻Simele的许可更改。<代码> /许可- < /Cord>编译器选项控件,编译器接受的C++源代码作为有效输入。严格限制于编译器前端。<代码> / Qsp另一方面,ectre
编译器选项会影响代码生成,即编译器后端。我不清楚
/permissive-
选项会对Spectre缓解或任何其他安全增强产生什么影响。博客文章没有提出任何关系。我缺少什么?我个人更喜欢sug@IInspectable的手势表明,实际上,您只想使用/Zc:twoPhase-compiler选项来让编译器与WRL源代码保持一致。
foo.template bar<T>();