‘mem_fun’: не является членом ‘std’

Я уже давно сталкиваюсь с этой ошибкой в ​​каждом проекте, который я создал с помощью CryEngine2 SDK в Visual Studio 2013 Professional.
Большую часть времени я только что отредактировал функцию из этого:

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.

1

Решение

Функция std::mem_fun определяется в заголовке <functional>,

На некоторых старых компиляторах вам не обязательно #include стандартный заголовок библиотеки для использования функций и классов, определенных в этом заголовке, потому что он может уже быть включен в какой-то другой стандартный заголовок библиотеки, который вы #include, Это не только для VS; это было также верно для более старых версий gcc, таких как 4.0. Новые компиляторы более соответствуют стандартам и потребуют от вас #include фактические заголовки, которые определяют стандартные библиотечные функции и классы.

3

Другие решения


По вопросам рекламы [email protected]