C ++の基本クラスの保護フィールドに関する問題
-
06-07-2019 - |
質問
いくつかのフィールドを保護した BassClass
などの基本クラスと、いくつかの純粋な仮想関数があります。次に、 class DerivedClass:public BassClass
のような派生クラス、たとえば DerivedClass
を作成します。 DerivedClassは、BassClassから保護フィールドを継承すべきではありませんか? DerivedClassをコンパイルしようとすると、コンパイラは、DerivedClassにこれらのフィールドが含まれていないと文句を言いますが、ここで何が間違っていますか?
ありがとう
解決
BassClass
(sic)および DerivedClass
がテンプレートであり、 DerivedClass
からアクセスする BassClass
メンバー>依存名として指定されていないため、表示されません。
E.g。
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