1

在我使用 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 的格式。这可能是问题的原因吗?如何修复?

编辑:添加,因为这也适用于新的 VS 版本。

4

1 回答 1

4

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

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

于 2014-07-04T20:36:09.803 回答