无法访问派生模板类中模板基类的成员[重复]

问题描述 投票:0回答:4

我有一个模板基类。可以说。

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 中编译。说明 member1 不是 Derived 的成员。但它已经从基类派生了,那为什么它不能访问它的成员呢?

c++ class templates gcc compiler-errors
4个回答
4
投票

您需要在基本成员名称前添加

this->
Base<KeyF>::
前缀,或者向类添加
using
声明以取消隐藏它们。他们的名字是从属名称,并且是隐藏的。


3
投票

Base
中的成员是
private
。您无法在本课程之外访问课程的
private members
friend
除外)。让它们
protected
,或者让
protected getters


1
投票

您尝试过受保护吗?自从我深入 C++ 以来已经有一段时间了...


0
投票
我认为解决这个问题需要两个改变:

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

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

    ::member1”。

在我的例子中使用 C++17 标准,问题得到了解决。希望这有帮助。感谢 Kerrek SB 提供的信息。

© www.soinside.com 2019 - 2024. All rights reserved.