BassClass
たとえば、いくつかのフィールドを保護した基本クラスと、いくつかの純粋な仮想関数があります。次に、派生クラス、たとえばDerivedClass
、のようにclass DerivedClass : public BassClass
。DerivedClass は BassClass から保護されたフィールドを継承するべきではありませんか? DerivedClass をコンパイルしようとすると、コンパイラは DerivedClass にこれらのフィールドがないと不平を言います。何が問題なのですか? ありがとう
質問する
4397 次
2 に答える
11
BassClass
(sic) と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;}
于 2009-11-28T20:34:54.207 に答える
0
これは機能します:
#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; }
};
于 2009-11-28T22:21:09.300 に答える