2009-11-11 7 views
6
class A 
{ 
    bool OutofRange(string& a, string& b, string c); 
    void Get(vector <string>& str, string& a, string& b); 
} 

void A::Get(vector <string>& str, string& a, string& b) 
{ 
    str.erase(
      std::remove_if (str.begin(), str.end(), BOOST_BIND(&A::OutOfRange, a, b, _1)), 
      str.end() 
      ); 
} 

Ich bin immer Fehler wie:boost binden Kompilierungsfehler

Error 7 error C2825: 'F': must be a class or namespace when followed by '::' File:bind.hpp 
Error 8 error C2039: 'result_type' : is not a member of '`global namespace'' t:\3rdparty\cpp\boost\boost-1.38.0\include\boost\bind.hpp 67 

Kann mir jemand sagen, was ich falsch mache?

+0

Beitrag einige echte Code fehlt. Z.B. 'A :: Get()' Definition fehlt Rückgabetyp. – dirkgently

+0

Ich schrieb meinen Code auf der Grundlage dieser Antwort hier ::: http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 – aajkaltak

Antwort

14

A :: OutOfRange ist eine Funktion von 4 Argumente - implizit * dies ist das erste Argument, die in Ihrer Bind-Klausel

+0

Ich denke nicht, dass ich kein Argument in der Bind-Klausel fehlt . Ich schrieb meinen Code basierend auf dieser Antwort hier - http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 mein Code funktionierte, wenn diese Funktionen nicht Mitglieder der Klasse waren, aber wenn ich gemacht habe sie Mitglieder der Klasse, sie haben nicht mehr gearbeitet! – aajkaltak

+3

Höre Catwalk, er hat Recht. Sie benötigen etwas wie dieses: BOOST_BIND (& A :: OutOfRange, * dieses, a, b, _1) http://www.boost.org/doc/libs/1_40_0/libs/bind/bind.html#with_member_pointers – McBeth

+3

@McBeth: in der Tat ist es besser: 'boost :: bind (& A :: OutOfRange, dies, a, b, _1)'. Bind behandelt die Zeiger dort korrekt, und auf der anderen Seite erstellt es Kopien der Argumente. Wenn Sie einen Zeiger übergeben, wird der Zeiger kopiert. Wenn Sie ein reales Objekt übergeben, wird ein anderes Objekt erstellt und die Kopie wird im generierten Funktor verwendet. –