将 Platform Toolset 从 v120 升级到 v142 时的编译问题(visualstudio 2019)

Posted

技术标签:

【中文标题】将 Platform Toolset 从 v120 升级到 v142 时的编译问题(visualstudio 2019)【英文标题】:Compile issue when upgrading Platform Toolset from v120 to v142 (visualstudio 2019) 【发布时间】:2020-03-23 15:15:37 【问题描述】:

我有一个项目,我可以使用平台工具集 v120 在 VS2019 中毫无问题地编译。 我将项目重新定位为使用平台工具集 v142 和 WSDK 10。我收到以下与模板相关的编译错误。有什么想法是什么原因造成的吗?

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.25.28610\include\utility(573,1):错误 C2440:“=”:无法从“_Other”转换为“_Ty”

        with
        [
            _Other=int
        ]
        and
        [
            _Ty=std::_Container_proxy *
        ] (compiling source file RTPPacketSequencer.cpp)
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.25.28610\include\utility(573,42): message : Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast (compiling source file RTPPacketSequencer.cpp)
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.25.28610\include\deque(872): message : see reference to function template instantiation '_Ty *std::exchange<std::_Container_proxy*,int>(_Ty &,_Other &&) noexcept(false)' being compiled
        with
        [
            _Ty=std::_Container_proxy *,
            _Other=int
        ] (compiling source file RTPPacketSequencer.cpp)
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.25.28610\include\deque(869): message : while compiling class template member function 'std::deque<T,std::allocator<T>>::~deque(void) noexcept'
        with
        [
            T=int
        ] (compiling source file RTPPacketSequencer.cpp)
D:\dev\_inc\lockqueue.h(46): message : see reference to function template instantiation 'std::deque<T,std::allocator<T>>::~deque(void) noexcept' being compiled
        with
        [
           T=int
        ] (compiling source file RTPPacketSequencer.cpp)
D:\dev\_inc\lockqueue.h(109): message : see reference to class template instantiation 'std::deque<T,std::allocator<T>>' being compiled
        with
        [
            T=int
        ] (compiling source file RTPPacketSequencer.cpp)
D:\dev\_inc\lockqueue.h(116): message : see reference to class template instantiation 'CLockQueueTX<T>' being compiled
        with
        [
            T=int
        ] (compiling source file RTPPacketSequencer.cpp)'''

【问题讨论】:

【参考方案1】:

您可能在某处有一些代码重新定义了 MSVC 标头内部使用的宏。

我在一个项目中遇到了类似的问题,当我在 C++98/C++03 模式下运行时,我试图在自己的头文件中提供 #define nullptr 0 兼容宏。确保我没有在 _MSC_VER 环境中定义它解决了这个问题。

【讨论】:

以上是关于将 Platform Toolset 从 v120 升级到 v142 时的编译问题(visualstudio 2019)的主要内容,如果未能解决你的问题,请参考以下文章

解决XP“不是有效Win32程序” 不是改Platform toolset

构建在 VS 2013 中找不到 Platform Toolset = 'v141'

Visual Studio 2019:如何使用 Platform Toolset v140_xp?

VS报错:The build tools for v140 (Platform Toolset = 'v140') cannot be found

wix toolset将 cab 打包进msi

错误MSB8008:指定的平台工具集(v120)未安装或无效[重复]