6

BassClassたとえば、いくつかのフィールドを保護した基本クラスと、いくつかの純粋な仮想関数があります。次に、派生クラス、たとえばDerivedClass、のようにclass DerivedClass : public BassClass。DerivedClass は BassClass から保護されたフィールドを継承するべきではありませんか? DerivedClass をコンパイルしようとすると、コンパイラは DerivedClass にこれらのフィールドがないと不平を言います。何が問題なのですか? ありがとう

4

2 に答える 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 に答える