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 获取代码。 现在我已经完成了从好吧,这个问题的答案似乎是 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 2010 显示旧的 Visual Studio 2008“添加引用”对话框