2010-11-22 10 views
5

मैं 2010.क्या वीएस -2010 के साथ समस्याएं बढ़ रही हैं?

std::vector<Device> device_list; 

boost::function<void (Device&, boost::posix_time::time_duration&)> callback = 
    boost::bind(&std::vector<Device>::push_back, &device_list, _1); 

कहाँ Device एक वर्ग है, इसके बारे में कुछ खास नहीं है करने से पहले निम्न कोड लाइन जो जी ++ और विजुअल स्टूडियो के तहत ठीक संकलित किया था।

अब मैं सिर्फ 2010 तक मेरी दृश्य स्टूडियो संस्करण के लिए उन्नत और संकलन के साथ विफल:

Error 1 error C2780: 'boost::_bi::bind_t<_bi::dm_result<MT::* ,A1>::type,boost::_mfi::dm<M,T>,_bi::list_av_1<A1>::type> boost::bind(M T::* ,A1)' : expects 2 arguments - 3 provided C:\developments\libsystools\trunk\src\upnp_control_point.cpp 95 

क्या हो रहा है और मैं यह कैसे हल कर सकते हैं?

धन्यवाद।

+0

बढ़ावा का कौन सा संस्करण? –

+0

@ सैम मिलर: 1.44। – ereOn

उत्तर

10

यह शायद इसलिए है क्योंकि vector::push_back अब समर्थन या सी ++ 0x सुविधाओं के माध्यम से 2 अधिभार है, जिससे bind अस्पष्ट है।

void push_back(
    const Type&_Val 
); 
void push_back(
    Type&&_Val 
); 

यह काम करते हैं, या में निर्मित समारोह @ DeadMG के जवाब में सुझाव दिया उपयोग करना चाहिए:

std::vector<Device> device_list; 

boost::function<void (Device&, boost::posix_time::time_duration&)> callback = 
    boost::bind(static_cast<void (std::vector<Device>::*)(const Device&)> 
    (&std::vector<Device>::push_back), &device_list, _1); 
+1

+1। स्पष्टीकरण और समाधान दोनों के लिए धन्यवाद। मैंने फ़ैशन पॉइंटर को स्थिर-कास्टिंग करने का कभी सोचा नहीं होगा;) – ereOn

4

MSVC10 में बाध्यकारी के साथ मुद्दों कर रहे हैं। यह पहली पोस्ट नहीं है जिसमें मैंने रिपोर्टिंग समस्याओं को देखा है। दूसरा, यह लैम्बडास के परिचय के साथ पूरी तरह से और पूरी तरह से अनावश्यक है, और boost :: function std :: function द्वारा अधिग्रहित किया गया है।

std::vector<Device> devices; 
std::function<void (Device&, boost::posix_time::time_duration&)> callback = [&](Device& dev, boost::posix_time::time_duration& time) { 
    devices.push_back(dev); 
}; 

MSVC10 में बाध्यकारी उपयोग करने की कोई आवश्यकता नहीं है।

+0

यह सी ++ 0x –

+0

बीटीडब्ल्यू 'बूस्ट :: बाइंड' अस्पष्ट सदस्य फ़ंक्शन ओवरलोड के साथ बेहतर है, दृश्य सी ++ में केवल समस्याग्रस्त नहीं है, और सुरुचिपूर्ण विकल्प के लिए +1 –

+0

सी ++ 0x में बाध्यकारी का उपयोग करने के बहुत सारे कारण हैं। –