erreur C2064: terme n'évalue pas à une fonction prenant 1 arguments

class Student {
    //...
    bool Graduate() { return m_bGraduate; }
    //...
};

class School {
    vector<Student*> m_vecStudents;

    void DelAndNullify(Student* &pStd);
    void Fun1();
};

void School::DelAndNullify(Student* &pStd)
{
    if ( (pStd != NULL) && (pStd->Graduate()) )
    {
        delete pStd;
        pStd = NULL;
    }
}

void School::Fun1()
{
    for_each(m_vecStudents.begin(), m_vecStudents.end(), mem_fun(&School::DelAndNullify));
}

Erreur 1 erreur C2064: terme n'évalue pas à une fonction prenant 1 arguments C:\Program Files\Microsoft Visual Studio 10.0\VC\include\algorithme 22 1 Simulation

Pourquoi j'ai cette erreur?


mis à jour

changement Student à pStd


mis à jour //algorithme de fichier

template<class _InIt, class _Fn1> inline
_Fn1 _For_each(_InIt _First, _InIt _Last, _Fn1 _Func)
{
    //perform function for each element
    for (; _First != _Last; ++_First)
        _Func(*_First); //<<<<<<<< this line!
    return (_Func);
}

BTW, si je définir le DelAndNullify comme static ensuite la ligne suivante passe le compilateur

for_each(m_vecStudents.begin(), m_vecStudents.end(), ptr_fun(&School::DelAndNullify));

Mis à jour 05/09/2012

#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
#include <iostream>
#include <iomanip>
#include <functional>
#include <boost/bind.hpp>

class Student {
public:
    Student(int id, bool bGraduate) : m_iID(id), m_bGraduate(bGraduate) {}
    bool Graduate() const { return m_bGraduate; }
private:
    int  m_iID;
    bool m_bGraduate;
};

class School {
public:
    School(int numStudent)
    {
        for (int i=0; i<numStudent; ++i)
        {
            m_vecStudents.push_back(new Student(i+1, false));
        }
    }

    ~School() 
    {   
        //deallocate the allocated student resource to prevent memory leak!
    }

    void DelAndNullify(Student* &pStd);
    void Fun1();

private:
    std::vector<Student*> m_vecStudents;

};

void School::DelAndNullify(Student* &pStd)
{
    if ( (pStd != NULL) && (!pStd->Graduate()) )
    {
        delete pStd;
        pStd = NULL;
    }
}

void School::Fun1()
{   //http://stackoverflow.com/questions/6065041/error-c2064-term-does-not-evaluate-to-a-function-taking-1-arguments
    std::for_each(m_vecStudents.begin(), m_vecStudents.end(), std::bind1st(std::mem_fun(&School::DelAndNullify), this));
    //boost::bind(&School::DelAndNullify, this, _1);
}

int main(int /*argc*/, char* /*argv*/[])
{
    School school(10);
    school.Fun1();
    return 0;
}

Erreur 1 erreur C2535: "void std::binder1st<_Fn2>::operator ()(Étudiant
*&) const' : membre de la fonction déjà définie ou déclarée c:\Program Files\Microsoft Visual Studio 10.0\VC\include\xfunctional 299

Vous devez obtenir un numéro de ligne avec votre erreur. Veuillez indiquer sur le code que vous avez montré.
il se plaint de l'for_each déclaration. -- je vous remercie
La ligne qui correspond-il ?
peut aider sur mon dernier posté code complet qui ne peut pas transmettre le VS2010 après j'ai suivi tous les commentaires comme suit?
Mon dieux, quel gâchis.

OriginalL'auteur q0987 | 2011-05-19