“mem_fun”:不是“STD”的成员('mem_fun' : is not a

2019-10-20 09:33发布

我一直在经历这个错误了一段时间,在每一个,我已经在Visual Studio 2013专业版与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的格式,当我第一次打开了解决方案。 也许这是问题的原因是什么? 怎样才可以解决吗?

编辑:增加了视觉工作室2015年 ,因为这也适用于新版本VS。

Answer 1:

该函数std::mem_fun在标头中定义<functional>

在一些旧的编译器,你不一定需要#include以使用在头文件中定义的函数和类标准库的头,因为它可能已经被其他的标准库头,你可以包含#include 。 这不是独家VS; 也有人为旧版本的GCC真实的,像4.0。 较新的编译器是更符合标准的,将需要您#include定义的标准库函数和类实际的头。



文章来源: 'mem_fun' : is not a member of 'std'