سؤال

لدي فئة قاعدة مجردة تحتوي على تنفيذ متداخل خاص. يعطيني Visual C ++ الخطأ التالي عندما أحاول إنشاء تنفيذ متداخل غير متداخل:

خطأ C2259: "العقدة :: فارغة_node": لا يمكن إنشاء فئة مجردة (السطر 32)

بقدر ما أستطيع أن أقول ، لقد تجاوزت جميع الأعضاء التجريدين في الفصل الأساسي

يتبع الكود:

using namespace boost;
template<typename K, typename V>
class node {
protected:
    class empty_node : public node<K,V> {
    public:
        bool is_empty(){ return true; }
        const shared_ptr<K> key() const { throw empty_node_exception; }
        const shared_ptr<V> value() const { throw empty_node_exception; }
        const shared_ptr<node<K,V>> left() const { throw empty_node_exception; }
        const shared_ptr<node<K,V>> right() const { throw empty_node_exception; }
        const shared_ptr<node<K,V>> add(const shared_ptr<K> &key, const shared_ptr<V> &value) const {
            return shared_ptr<node<K,V>>();
        }
        const shared_ptr<node<K,V>> remove(const shared_ptr<K> &key) const { throw empty_node_exception; }
        const shared_ptr<node<K,V>> search(const shared_ptr<K> &key) const { return shared_ptr<node<K,V>>(this); }
    };
    static shared_ptr<node<K,V>> m_empty;
public:
    virtual bool is_empty() = 0;
    virtual const shared_ptr<K> key() = 0;
    virtual const shared_ptr<V> value() = 0;
    virtual const shared_ptr<node<K,V>> left() = 0;
    virtual const shared_ptr<node<K,V>> right() = 0;
    virtual const shared_ptr<node<K,V>> add(const shared_ptr<K> &key, const shared_ptr<V> &value) = 0;
    virtual const shared_ptr<node<K,V>> remove(const shared_ptr<K> &key) = 0;
    virtual const shared_ptr<node<K,V>> search(const shared_ptr<K> &key) = 0;


    static shared_ptr<node<K,V>> empty(){
        if(NULL == m_empty.get()){
            m_empty.reset(new empty_node());
        }
        return m_empty;
    }
};
هل كانت مفيدة؟

المحلول

لا تتطابق توقيعات الوظيفة. وظائف الأعضاء الظاهري النقي في الفئة الأساسية "العقدة" ليست const ؛ الوظائف في الفئة المشتقة "فارغة_node" هي const.

تحتاج إما إلى جعل الوظائف الافتراضية الفئة الأساسية const أو إزالة مؤهل const من وظائف الأعضاء في الفئة المشتقة.

نصائح أخرى

يفتقد فصلك المتداخل إلى إصدارات غير محتملة من key, value, left, right, add, remove و search أساليب.

لك const لا يتم تجاوز الوظائف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top