'mem_fun' : 不是'std'的成员
'mem_fun' : is not a member of 'std'
我已经遇到这个错误有一段时间了,在我用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
。
- std::ofstream 作为类成员删除复制构造函数?
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- std::to_string - 'to_string' 不是 'std' 的成员 - Visual Studio Code 1.42.0
- 使用 std::async 时死锁,将来作为成员
- 可变参数模板参数扩展 类型为 std::function 的类成员
- FreeFileSync C++错误:'byte'不是 'std' 的成员
- 为什么 std::sort 找不到合适的(静态成员)函数重载?
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 在模板化成员函数的返回类型中使用 std::enable_if 时的编译器差异
- 有没有办法避免为 std::variant 类成员中的所有类型编写构造函数?
- 是否允许类类型的 std::function 成员变量(不完整类型)?
- 访问 std:vector 的类成员 std:vector 在一个类中与另一个 std:vector
- std::异步与非静态成员函数
- 如何在 c++11 中静态断言 std::array 类成员进行排序?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- 在哪里可以找到 std::bitset 的数据成员?
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- unique_ptr问题:不是'std'成员
- std::成员函数的异步调用