Visual Studio 2008 -> 2010 端口:错误 C2039:“select2nd”:不是“std”的成员

Posted

技术标签:

【中文标题】Visual Studio 2008 -> 2010 端口:错误 C2039:“select2nd”:不是“std”的成员【英文标题】:Visual Studio 2008 -> 2010 port: error C2039: 'select2nd' : is not a member of 'std' 【发布时间】:2012-07-17 06:33:50 【问题描述】:

我正在将一个大型 C++ COM 项目从 VS2008 移植到 VS2010。有一行代码如下,在我的VS2008项目中编译正常,但是在VS2010中编译时出现引用错误:

std::select2nd<std::map<DWORD, ISomethingUseful*>::value_type>());

编译错误是:

error C2039: 'select2nd' : is not a member of 'std'

我知道这是一个“非标准”函数,但是编写此代码的人最初是在 VS2008 的 std 命名空间中发现它的,而他们使用的任何 #include 在 VS2010 中似乎不再正确。

有谁知道这个功能现在在 VS2010 中的什么位置?具体来说,现在需要包含哪个头文件才能使用它?


编辑:为了暂时解决这个问题,我从 VS2008 VC\include\functional 头文件中获取了代码,并将其包含在我的代码库中(在实用程序类中),如下面的回答所述。

仍然会感谢其他人能够提供的任何见解!

【问题讨论】:

您确定编写此代码的人找到 std 中的函数,而不是添加 std 中的函数吗? @DigitalDa,这和这个问题有什么关系? 我尝试搜索 VS2010 库,它看起来根本不包含它。这个参考似乎表明它是一个 SGI 非标准函数:sgi.com/tech/stl/select2nd.html。看起来它与“.second”的功能相同,因此您可以尝试或自己编写函数并将其实现为 .second。 从外观上看,它是 stl_function.h 的一部分,它是功能的旧标头。在 SGI 实现中甚至有一条注释: //select1st 和 select2nd 是扩展:它们不是标准的一部分。如果需要,您可以从 www.sgi.com/tech/stl/stl_function.h 获取代码。 现在我已经完成了从 复制 select2nd 函数的 VS2008 实现并将其包含在我的代码库中。我会等着看是否有人提出更好的答案,如果没有,我会在这里发布解决方案,包括要使用的源代码,以供后代使用!感谢您迄今为止的帮助。 【参考方案1】:

好吧,这个问题的答案似乎是 std::select2nd(...) 函数在 VS2008 中通过 functional 库得到支持,但是它已在 VS2010 中被弃用。以下是来自 VS2008 的代码,如果需要,可以在将代码移植到 VS2010 时重新实现此功能:

template<class Pair> struct select2nd : public std::unary_function<Pair, typename Pair::second_type>
   
    // functor for unary second of pair selector operator
    const typename Pair::second_type& operator()(const Pair& Left) const
       
        // apply second selector operator to pair operand
        return (Left.second);
    
;

【讨论】:

以上是关于Visual Studio 2008 -> 2010 端口:错误 C2039:“select2nd”:不是“std”的成员的主要内容,如果未能解决你的问题,请参考以下文章

无法再使用 Visual Studio 2008 连接到 Visual Studio Team Services

Visual Studio 2012 未能检测到 Visual Studio 2008 构建工具

visual studio 2008如何引用dll

Visual Studio 2010 显示旧的 Visual Studio 2008“添加引用”对话框

如何在 Visual Studio 2010 中使用 Visual Studio 2008 创建的 DLL?

visual studio 2008 安装过程中出现1330错误