为啥我不能访问静态多态派生类中的受保护成员?

Posted

技术标签:

【中文标题】为啥我不能访问静态多态派生类中的受保护成员?【英文标题】:Why can't I access protected member in static polymorphic derived class?为什么我不能访问静态多态派生类中的受保护成员? 【发布时间】:2013-06-05 06:18:09 【问题描述】:

这很好用:

    class A
    protected:
    int i;
    ;

    class B:public A
    public:
    void f()
        i=5; //fine
      
    ;

但是,如果我尝试对静态多态性做同样的事情,它会失败:

template <class Derived, typename T, int N>
class Vector

protected:

std::vector<T> v;

然后:

  template <typename T, int N>
  class Vector234:public Vector<Vector234<T, N>,T,N>

    void test()
        T t=v[0]; // v is undeclared identifier
    

这是为什么?

【问题讨论】:

这在问题***.com/questions/1624564/…和***.com/questions/11405/…中得到解决 【参考方案1】:

因为是依赖名,也就是依赖于模板参数T。您需要明确指定this-&gt;v[0]Vector&lt;Vector234&lt;T, N&gt;,T,N&gt;::v[0]

【讨论】:

以上是关于为啥我不能访问静态多态派生类中的受保护成员?的主要内容,如果未能解决你的问题,请参考以下文章

访问派生类中的受保护成员

C#访问派生类中的受保护成员[重复]

从派生类访问基类中的受保护成员

protectedpublicprivate

C#:基类中的受保护方法;无法使用来自另一个类的派生类对象进行访问[重复]

无法访问派生类中基类的受保护成员