2009-11-11 10 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() 
      ); 
} 

mi się błędy takie jak:doładowania błąd wiążą kompilacja

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 

Czy ktoś może mi powiedzieć co robię źle?

+0

post jakiś prawdziwy kod. Na przykład. Definicja 'A :: Get()' nie zawiera zwracanego typu. – dirkgently

+0

Napisałem swój kod na podstawie tej odpowiedzi: :: http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 – aajkaltak

Odpowiedz

14

A :: outofrange jest funkcją 4 argumentów - niejawna * co jest pierwszym argumentem, którego brakuje w klauzuli wiążą

+0

Nie sądzę, że brakuje mi jakiegokolwiek argumentu w klauzuli powiązania . Napisałem swój kod na podstawie tej odpowiedzi tutaj: http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 mój kod zadziałał, gdy funkcje te nie były członkami klasy, ale gdy robiłem im członków klasy, oni już nie pracowali! – aajkaltak

+3

Posłuchaj wybiegu, on ma rację. Potrzebujesz czegoś takiego: BOOST_BIND (& A :: OutOfRange, * this, a, b, _1) http://www.boost.org/doc/libs/1_40_0/libs/bind/bind.html#with_member_pointers – McBeth

+3

@McBeth: w rzeczywistości jest lepiej: 'boost :: bind (& A :: OutOfRange, this, a, b, _1)'. Bind radzi sobie dobrze ze wskazówkami tam, a z drugiej strony tworzy kopie argumentów. W przypadku podania wskaźnika wskaźnik jest kopiowany, jeśli przejedziemy przez obiekt prawdziwy, zostanie utworzony inny obiekt, a kopia zostanie użyta w wygenerowanym funcie. –