'mem_fun' : 不是'std'的成员

'mem_fun' : is not a member of 'std'

本文关键字:std 成员 不是 fun mem      更新时间:2023-10-16

我已经遇到这个错误有一段时间了,在我用Visual Studio 2013 Professional中的CryEngine2 SDK构建的每个项目上。大多数时候,我只是这样编辑函数:

void CMultipleGrabHandler::Reset()
{
    std::for_each (m_handlers.begin(), m_handlers.end(), std::mem_fun (&CBaseGrabHandler::Reset));
    std::vector <CAnimatedGrabHandler*>::iterator it = m_handlers.begin();
    std::vector <CAnimatedGrabHandler*>::iterator end = m_handlers.end();
    for ( ; it != end; ++it)
        delete *it;
    m_handlers.erase (m_handlers.begin (), m_handlers.end ());
}

:

void CMultipleGrabHandler::Reset()
{
}

我知道这不是解决问题的好方法,但它消除了'mem_fun' : is not a member of 'std'错误。

我现在正在寻找一个解决方案来克服这个问题,因为我刚刚开始在一个新项目上工作,其中稳定性是关键;这是不好如果我删除CMultipleGrabHandler::Reset()的主体,因为它可能会导致崩溃在某些情况下。我已经浏览了互联网解决这个问题,但我没有找到任何东西(最接近的东西我发现是什么mem_fun做的解释)。

我试过把std::mem_fun,但我只是得到一个mem_fun is undefined错误,这表明这不是正确的方式去修复这个错误。

该项目最初是在Visual Studio 2005中创建的,当我第一次打开解决方案时,它被迁移到Visual Studio 2013的格式。这可能是问题的原因吗?怎样才能解决这个问题?

编辑:添加visual-studio-2015,因为这也适用于新的VS版本

函数std::mem_fun在头文件<functional>中定义。

在一些旧的编译器上,为了使用在标准库头文件中定义的函数和类,您不一定需要#include标准库头文件,因为它可能已经包含在您#include的其他标准库头文件中。这并不是VS独有的;对于较旧的GCC版本(如4.0)也是如此。较新的编译器更符合标准,并且需要您将定义标准库函数和类的实际头文件#include