مشكلة مع المجالات المحمية في الفئة الأساسية في ج ++

StackOverflow https://stackoverflow.com/questions/1813671

سؤال

ولدي فئة أساسية، ويقول BassClass، مع بعض المجالات، وهو ما جعلها محمية، وبعض الدالات الظاهرية خالصة. ثم فئة مشتقة، وتقول DerivedClass، مثل class DerivedClass : public BassClass. لا ينبغي DerivedClass ترث الحقول محمية من BassClass؟ عندما حاولت تجميع DerivedClass، المترجم يشكو من أن DerivedClass ليس لديها أي من هذه المجالات، ما هو الخطأ هنا؟ بفضل

هل كانت مفيدة؟

المحلول

إذا BassClass (كذا) وDerivedClass والقوالب، ولم يتم تحديد عضو BassClass التي تريد الوصول إليها من DerivedClass كاسم تابع، أنه لن تكون مرئية.

ومنها مثلا.

template <typename T> class BaseClass {
protected: 
    int value;
};

template <typename T> class DerivedClass : public BaseClass<T> {
public:
    int get_value() {return value;} // ERROR: value is not a dependent name
};

لوصول تحتاج إلى إعطاء مزيد من المعلومات. على سبيل المثال، قد تحدد بشكل كامل اسم العضو:

    int get_value() {return BaseClass<T>::value;}

وأو قد جعلها صراحة أنك في اشارة الى عضو الفئة:

    int get_value() {return this->value;}

نصائح أخرى

وهذا يعمل:

#include <iostream>

struct Base {
virtual void print () const = 0;
protected:
int val;
};

struct Derived : Base {
void print () { std::cout << "Bases's val: " << val << std::endl; }
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top