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

मैं की तरह त्रुटियों हो रही है:बढ़ावा बाँध संकलन त्रुटि

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 

कोई मुझे बता सकते हैं मैं गलत क्या कर रहा हूँ?

+0

पोस्ट कुछ वास्तविक कोड में याद आ रही है। जैसे 'ए :: Get() 'परिभाषा में वापसी प्रकार गुम है। – dirkgently

+0

मैंने यहां इस उत्तर के आधार पर अपना कोड लिखा है ::: http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 – aajkaltak

उत्तर

14

एक :: OutOfRange 4 तर्क की एक समारोह है - अंतर्निहित * इस किया जा रहा पहला तर्क है, जो आपके बाँध खंड

+0

मुझे नहीं लगता कि मुझे बाध्य खंड में कोई तर्क नहीं है । मैंने यहां इस उत्तर के आधार पर अपना कोड लिखा - http://stackoverflow.com/questions/1677211/sort-using-boostbind/1677302#1677302 मेरा कोड तब काम करता था जब वे कार्य कक्षा के सदस्य नहीं थे लेकिन जब मैंने बनाया उन्हें कक्षा के सदस्य, वे अब और काम नहीं किया! – aajkaltak

+3

catwalk सुनें, वह सही है। आपको इस तरह कुछ चाहिए: BOOST_BIND (& A :: आउटऑफेंज, * यह, ए, बी, _1) http://www.boost.org/doc/libs/1_40_0/libs/bind/bind.html#with_member_pointers – McBeth

+3

@ एमसीबीथ: वास्तव में यह बेहतर है: 'बूस्ट :: बाइंड (और ए :: आउटऑफेंज, यह, ए, बी, _1) '। बाइंड पॉइंटर्स के साथ ठीक तरह से सौदे करता है, और दूसरी तरफ यह तर्कों की प्रतियां बनाता है। पॉइंटर पास करने के मामले में पॉइंटर की प्रतिलिपि बनाई जाती है, यदि आप वास्तविक ऑब्जेक्ट पास करते हैं तो दूसरी ऑब्जेक्ट बनाई जाएगी और कॉपी जेनरेटर में इस्तेमाल की जाएगी। –