无法访问派生模板类中模板基类的成员

Can't access members of a Template base class within a derived template class

本文关键字:基类 成员 派生 访问      更新时间:2023-10-16

我有一个模板基类。比方说。

template<class KeyF>
class Base 
{
  private:
   int member1;
   char member2;
   ....
};

我从上面的类中派生了另一个类。

template<class KeyF>
class Derived : public Base<KeyF>
{
  public:
  void func1() {
    <accessing member1/member2>
  }
  ....
};

上面的代码无法在 gcc 中编译。 说成员 1 不是派生的成员。但是它已经派生自基类,那么为什么它无法访问它的成员呢?

您需要在基本成员名称前面加上 this->Base<KeyF>:: ,或者向类添加 using 声明以取消隐藏它们。它们的名称是依赖名称,并且是隐藏的。

Base 中的成员private .您不能访问此类之外的类private membersfriend 除外)。让他们protected,或者做protected getters

你试过保护吗? 自从我深入C++以来已经有一点了...

我认为需要两个更改来解决问题:

  1. 在基类中,将成员定义为"受保护"而不是"私有",以便在派生类中可访问。

  2. 在派生类中,在受保护成员之前添加基类名称。在这种情况下,它应该看起来像"Base::member1"。

在我的情况下使用 C++17 标准,问题已解决。希望这是有帮助的。感谢Kerrek SB提供的信息。