Я уже давно сталкиваюсь с этой ошибкой в каждом проекте, который я создал с помощью 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, когда я впервые открыл решение.
Может ли это быть причиной проблемы?
Как это можно исправить?
Редактировать: добавленной зрительно-студия-2015 поскольку это также относится к новой версии VS.
Функция std::mem_fun
определяется в заголовке <functional>
,
На некоторых старых компиляторах вам не обязательно #include
стандартный заголовок библиотеки для использования функций и классов, определенных в этом заголовке, потому что он может уже быть включен в какой-то другой стандартный заголовок библиотеки, который вы #include
, Это не только для VS; это было также верно для более старых версий gcc, таких как 4.0. Новые компиляторы более соответствуют стандартам и потребуют от вас #include
фактические заголовки, которые определяют стандартные библиотечные функции и классы.