我有一个基类,比如说BassClass
,有一些字段,我使它们受到保护,还有一些纯虚函数。然后派生类,DerivedClass
比如class DerivedClass : public BassClass
. DerivedClass 不应该从 BassClass 继承受保护的字段吗?当我尝试编译 DerivedClass 时,编译器抱怨 DerivedClass 没有任何这些字段,这里有什么问题?谢谢
问问题
4397 次
2 回答
11
如果BassClass
(sic) andDerivedClass
是模板,并且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 回答