无法访问派生模板类中模板基类的成员
Can't access members of a Template base class within a derived template class
我有一个模板基类。比方说。
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 members
(friend
除外)。让他们protected
,或者做protected getters
。
你试过保护吗? 自从我深入C++以来已经有一点了...
我认为需要两个更改来解决问题:
-
在基类中,将成员定义为"受保护"而不是"私有",以便在派生类中可访问。
-
在派生类中,在受保护成员之前添加基类名称。在这种情况下,它应该看起来像"Base
::member1"。
在我的情况下使用 C++17 标准,问题已解决。希望这是有帮助的。感谢Kerrek SB提供的信息。
相关文章:
- 派生类看不到基类成员
- C++11: 如何访问派生类中的基类成员?
- Qml 未收到基类成员变量的更新值
- 指向从指针派生类成员函数的指针,指向基类成员函数
- 初始化基类成员 (c++) 的首选方法
- 访问多级复合关系中的基类成员
- 允许从特定派生类访问基类成员
- 在派生类的成员联合中包含继承的基类成员
- 由派生类设置的 constexpr 基类成员
- 从派生类调用的抽象基类成员函数
- 从抽象基类访问另一个基类成员
- C++派生类访问基类成员
- 不能引用派生模板类中的基类成员
- C2694 在析构函数上,当基类成员的析构函数具有非空 noexcept 说明符和主体时
- 在Visual Studio 2017中,通过扩展每个参数包来呼叫基类成员失败
- 在C 中访问带有不正确的下属的基类成员
- C++将基类成员链接到派生类成员
- 从基类成员函数返回派生类的实例
- 从指针到基类成员的模板推导
- 是否可以从派生类中排除基类成员?