मैं इस तरह एक वर्ग पदानुक्रम है:सी ++ सार क्लास के रूप में std :: मानचित्र कुंजी
std::map<Vehicle, double> prices;
:
struct Vehicle {
virtual string model() = 0; // abstract
...
}
struct Car : public Vehicle {...}
struct Truck : public Vehicle {...}
मैं कुछ जानकारी है कि मैं कुछ Vehicle
उदाहरणों के बारे में प्राप्त के साथ एक std::map
रखने की जरूरत है
हालांकि मुझे निम्न त्रुटि मिलती है:
/usr/include/c++/4.2.1/bits/stl_pair.h: In instantiation of ‘std::pair<const Vehicle, double>’:
/usr/include/c++/4.2.1/bits/stl_map.h:349: instantiated from ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = Vehicle, _Tp = double, _Compare = std::less<Vehicle>, _Alloc = std::allocator<std::pair<const Vehicle, double> >]’
test.cpp:10: instantiated from here
/usr/include/c++/4.2.1/bits/stl_pair.h:73: error: cannot declare field ‘std::pair<const Vehicle, double>::first’ to be of abstract type ‘const Vehicle’
Model.hpp:28: note: because the following virtual functions are pure within ‘const Vehicle’:
Model.hpp:32: note: virtual string Vehicle::model()
तो आप एक अमूर्त सीएल का उपयोग नहीं कर सकते std::map
कुंजी के रूप में गधा। जहां तक मैं यह कह सकता हूं क्योंकि नक्शा उनकी चाबियों की प्रतिलिपि बनाते हैं (कॉपी-कन्स्ट्रक्टर या असाइनमेंट ऑपरेटर के माध्यम से) और यह एक अमूर्त वर्ग (Vehicle
) को तुरंत चालू करने का संकेत देगा। अगर आप भी कर सकते हैं, तो भी हम object slicing शिकार का शिकार करेंगे।
मुझे क्या करना चाहिए?
ऐसा लगता है मैं संकेत उपयोग नहीं कर सकते, क्योंकि वहाँ तार्किक समान Car
या Truck
के अलग प्रतियां हो सकता है। (यानी दो Car
वस्तुओं अलग instantiated है, लेकिन जो एक ही कार और operator==
रिटर्न सही प्रतिनिधित्व करते हैं। मैं इन std::map
में एक ही वस्तु के लिए नक्शे की जरूरत है।)
क्यों नहीं 'Vehicle' एक' price' सदस्य दे सकता है? या मॉडल नाम से मूल्य के लिए 'मानचित्र <स्ट्रिंग, डबल>' का उपयोग करें? – Beta
@ बीटा नाटक करें यह एक दी गई खोज के लिए है (कहें, एक विशिष्ट भौगोलिक क्षेत्र में)। इसके अलावा यह bitwise-copies-synchronization समस्या हल नहीं करता है; अगर आपके पास 'कार' के दो उदाहरण हैं, तो केवल एक ही कीमत प्राप्त करेगा। –
वास्तविक कारें पंजीकरण संख्या और एक अद्वितीय विनिर्माण धारावाहिक संख्या के साथ इसे हल करती हैं। –