مشكلة مع المجالات المحمية في الفئة الأساسية في ج ++
-
06-07-2019 - |
سؤال
ولدي فئة أساسية، ويقول 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; }
};
لا تنتمي إلى StackOverflow