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

:boost bağlama derleme hatası ben gibi hatalar alıyorum

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 

birisi yanlış yapıyorum bana söyleyebilir misiniz?

+0

Mesaj bazı gerçek kod eksik bu varlık İlk argüman. Örneğin. A :: Get() 'tanımı, dönüş türü eksik. – dirkgently

+0

Bu cevaba dayanarak kodumu buraya yazdım ::: http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 – aajkaltak

cevap

14

A :: outofrange 4 bağımsız değişkenlerin bir fonksiyonu - örtük * Lütfen bağlama maddesi

+0

Ben bind maddesinde herhangi bir argümanı kaçırdığımı düşünmüyorum . Bu cevaba dayanarak kodumu buraya yazdım - http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 Kodum, bu işlevler sınıfın üyesi değilken Onlar sınıfın üyeleri, artık işe yaramadılar! – aajkaltak

+3

Catwalk'ı dinle, o haklı. Bunun gibi bir şeye ihtiyacınız vardır: BOOST_BIND (& A :: OutOfRange, * bu, a, b, _1) http://www.boost.org/doc/libs/1_40_0/libs/bind/bind.html#with_member_pointers – McBeth

+3

@McBeth: aslında daha iyisi: 'boost :: bind (& A :: OutOfRange, bu, a, b, _1)'. Oradaki işaretçilerle uygun şekilde anlaşma yapın ve diğer yandan argümanların kopyasını çıkartın. Bir işaretçiyi geçirme durumunda işaretçi kopyalanır, gerçek bir nesneyi iletirseniz başka bir nesne oluşturulacak ve kopya oluşturulan kangırda kullanılacaktır. –