Решение: не используйте std::for_each
. Используйте любое из следующего (что подходит для вашей ситуации):
Пример std::find
:
if(std::find(m_widgetList.begin(), m_widgetList.end(),pi) == m_widgetList.end())
m_widgetList.push_back(pi);
Обратите внимание: если вы используете std::find
, вам не нужен функтор findWidget
. В конце концов, вы сравниваете только адреса (то есть указатели).
Кстати, кажется, вы хотите, чтобы список содержал уникальных элементов, и не хотели бы хранить дубликаты. Если это так, то вам лучше подумать:
std::set
автоматически обработает дубликаты элементов. То есть вы можете сделать это:
m_widgetSet.insert(pi);
тогда он вставит pi
в набор, если его нет в нем. И если он уже содержит его, insert
не вставит его в набор.