我在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版本。
答案 0 :(得分:4)
函数std::mem_fun
在标题<functional>
中定义。
在一些较旧的编译器上,您不一定需要#include
标准库头以便使用该头中定义的函数和类,因为它可能已经包含在您的其他一些标准库头中#include
。这不是VS独有的;对于较旧的gcc版本,例如4.0也是如此。较新的编译器更符合标准,并且需要#include
定义标准库函数和类的实际头文件。