繁体   English   中英

c ++中基类中受保护字段的问题

[英]Problem with protected fields in base class in c++

我有一个基类,比如BassClass ,有一些字段,我让它们受到保护,还有一些纯虚函数。 然后派生类,比如DerivedClassclass DerivedClass : public BassClass DerivedClass不应该从BassClass继承受保护的字段吗? 当我尝试编译DerivedClass时,编译器抱怨DerivedClass没有任何这些字段,这里有什么问题? 谢谢

如果BassClass (sic)和DerivedClass是模板,并且您要从DerivedClass访问的BassClass成员未指定为依赖名称,则它将不可见。

例如

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; }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM