for_each
принимает функцию по значению. То есть он использует копию функтора, а не сам функтор. Ваш местный c
остался без изменений.
for_each
возвращает используемый функтор, поэтому вы можете сделать:
Count c;
c = for_each(s.begin(), s.end(), c);
Или более идиоматически:
Count c = for_each(s.begin(), s.end(), Count());
Однако такая функциональность уже существует (вам не нужен ваш функтор):
int total = std::accumulate(s.begin(), s.end(), 0);