2012-08-30 15 views
5

मुझे एक लूप मिला जिसमें मैं एक अमूर्त वर्ग की वस्तु पर std :: unique_ptr लौटने वाले फ़ंक्शन का उपयोग करता हूं। मैं इन वस्तुओं को पुश_बैक के माध्यम से std :: वेक्टर में स्टोर करना चाहता हूं। लेकिन चूंकि वस्तुओं सार प्रकार के होते हैं मैं निम्नलिखित त्रुटि मिलती है: लाइनstd :: unique_ptr द्वारा दिए गए एक अमूर्त वर्ग की ऑब्जेक्ट्स के वेक्टर को कैसे स्टोर करें?

cells.push_back(std::move(*cell)); 

जहां कोशिकाओं सार प्रकार का एक std::vector और cell है प्रकार की है के लिए

error: cannot allocate an object of abstract type 

std::unique_ptr<AbstractType>&& cell 

(मैं वास्तव में एक हैंडलर कक्षा में cell पास करता हूं) मुझे पता है कि कोई एक अमूर्त प्रकार को चालू नहीं कर सकता है और जैसा कि मैं मैं std को समझ रहा हूं: चालक ऑपरेटर को किसी भी तरह वस्तु को तुरंत चालू करने की आवश्यकता है?

क्या कोई मेरी मदद कर सकता है कि समस्या का प्रबंधन कैसे करें? या समारोह (परियोजना का मेरा हिस्सा नहीं) एक अमूर्त प्रकार की वस्तु के लिए एक अद्वितीय सूचक वापस नहीं करना चाहिए?

+6

क्या हम एक 'वेक्टर <सार तत्व टाइप' के बारे में बात कर रहे हैं? वह काम नहीं करेगा। एक 'वेक्टर

+0

आप सही हैं! मैं अंधेरा था, मैंने इसे 'वेक्टर soriak

+0

@ आर। मार्टिन्हो फर्नांडीस: आपकी टिप्पणी पर +1 (यह एक जवाब होना चाहिए)। आपको दिमाग पढ़ना होगा! –

उत्तर

9

आप AbstractType तत्वों को सीधे std::vector पर संग्रहीत नहीं कर सकते हैं। आप आसानी से unique_ptr एस std::vector<std::unique_ptr<AbstractType>> में cells.push_back(std::move(cell)) के साथ स्टोर कर सकते हैं।

+0

यह कारण है कि आप कॉपी कन्स्ट्रक्टर का आह्वान कर रहे हैं, और इस प्रकार एक अमूर्त वर्ग को चालू करने की कोशिश कर रहे हैं। –

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