2012-11-26 11 views
9

मैंने हाल ही में वीएस2012 स्थापित किया है। एक सी ++ प्रोजेक्ट (.NET 4.0 के साथ) जो VS2010 के तहत ठीक संकलित करता है VS2012 पर HashSet<T> को पहचान नहीं रहा है।हैशसेट <T> कहां VS2012 में गए?

System::Collections::Generic::HashSet<String^>^ _reasons; 

लेकिन उस त्रुटि में केवल परिणाम::

error C2039: 'HashSet' : is not a member of 'System::Collections::Generic 

प्रलेखन कहते हैं कि यह System.Collections.Generic में है मैं भी निम्नलिखित घोषणा के साथ स्पष्ट किया जा रहा है की कोशिश की। सी ++ कंपाइलर ऐसा नहीं सोचता है।

कोई विचार जहां यह चला गया?

+2

* ए सी ++ प्रोजेक्ट (नेट 4.0 के साथ) * ओच। ** सामान्य ** सी ++ में, 'unordered_set' है। –

+1

क्या यह सी ++ - सीएलआई के लिए है? –

+4

क्या आपके पास असेंबली 'System.Core' संदर्भित है? सिस्टम :: कलेक्शन :: जेनेरिक नेमस्पेस कई असेंबली में मौजूद है, यदि आप उनमें से किसी एक का संदर्भ देते हैं तो आपको वह त्रुटि संदेश मिलेगा, लेकिन हैशसेट सहित कोई नहीं। –

उत्तर

14

हैशसेट <> .NET के लिए देर से जोड़ा गया था, यह .NET 3.5 में उपलब्ध हो गया। नेमस्पेस पुराना है, mscorlib.dll में सिस्टम :: संग्रह :: जेनेरिक से .NET 2.0, स्टैक <> और कतार <> जैसी कक्षाएं शामिल हैं। हैशसेट <> .NET 3.5, System.Core.dll के लिए नई असेंबली में जोड़ा गया, वे 2.0 असेंबली के साथ टिंकर नहीं करना चाहते थे।

तदनुसार, आपको त्रुटि संदेश से बचने के लिए System.Core का संदर्भ जोड़ना होगा।

जब आप इस तरह की त्रुटि प्राप्त करते हैं तो हमेशा एमएसडीएन दस्तावेज़ीकरण को देखें, यह दिखाता है कि आप असेंबली संदर्भ की आवश्यकता है।

+0

धन्यवाद हंस। यह मेरे लिए नहीं हुआ कि मुझे एक नया संदर्भ जोड़ने की आवश्यकता होगी क्योंकि मैंने नेट फ्रेमवर्क को नहीं बदला है जिसे मैं संकलित कर रहा था। अब मुझे पता है। –

+0

ठीक है, आपने वास्तव में किया था। आपने लक्ष्य को 2.0 से 3.5 तक बदल दिया, एकमात्र संस्करण जिसमें System.Core है। सी ++ आईडीई उस बारे में परिष्कृत नहीं है जैसे सी # या वीबी.नेट आईडीई। सी ++ टूलिंग के बारे में बहुत विशिष्ट, यह आपको लगता है कि आप क्या कर रहे हैं। –

+1

ग्रेट उत्तर, लेकिन मेरे जैसे अन्य नए सी ++ लोगों की मदद करने के लिए, मेरा संदर्भ यह ठीक करने जैसा दिखता है: #using Mizmor

संबंधित मुद्दे