Driver::~Driver()
{
AutoCritSec acsDriverList(m_csDriverList,true);
DRIVERLIST::iterator it = m_DriverList.begin();
for(;it!=m_DriverList.end();it++)
{
if (it->second == this)
{
m_DriverList.erase(it);
it = m_DriverList.begin();
}
}
}
जब मैं विजुअल स्टूडियो 2003 में अपना प्रोग्राम संकलित करता हूं, तो मेरा प्रोग्राम अच्छा और अच्छा व्यवहार करता है। लेकिन जब मैं 2010 में भी ऐसा ही है, तो थोड़ी देर के अनुप्रयोग को बंद मैंमानचित्र/सेट इटेटरेटर incrementablemap/iterator को incrementable नहीं सेट
Expression:map/set iterator not incrementable
जैसे कुछ त्रुटि मिलती है और मैं
Expression:"standard c++ library out of range" && 0
किसी भी एक किसी भी विचार है कि क्या है क्या मिलता है जब मैं इस अनदेखी करने के लिए प्रेस यहां जा रहा है: मैं किसी के द्वारा किसी भी सुझाव के लिए बेहद ऋणी हूं। धन्यवाद और गर्म इच्छाओं के टन।
मिटा का अच्छा सिफारिश/निकालें। इस विशेष मामले में m_DriverList स्पष्ट रूप से जोड़ों का एक कंटेनर है या किसी प्रकार का नक्शा है, क्योंकि परीक्षण उस पर है-> दूसरा। Std :: को हटाने के बजाय इसे ldda या तुलना फ़ंक्शन के साथ std :: remove_if की आवश्यकता होगी। –
यदि कंटेनर एक नक्शा है (प्रश्न शीर्षक, सदस्य 'सेकंड' तक पहुंच) तो मुझे नहीं लगता कि * मिटाएं-निकालें * मुहावरे लागू किया जा सकता है। बेवकूफ आपके पास होने वाले लूप के समान है, लेकिन पुनरावृत्ति को पुनरारंभ करने के बजाय आप प्रतिलिपि को प्रतिलिपि बनाते हैं और फिर वर्तमान स्थिति को मिटा देते हैं। –
@ डेविडरोद्रिगुएज़-ड्राईबीस @ मार्कटाइलर: अच्छा पकड़; मैं परिवर्तनीय नाम में "सूची" द्वारा विचलित था। सी ++ 11 में, 'मिटाएं' पुनरावर्तक को अगले तत्व में लौटाता है (या यदि कोई अगला तत्व नहीं है तो एक-अतीत-अंत तक), और दृश्य C++ 2010 इसका समर्थन करता है। –