子类无法访问父成员

时间:2018-02-12 13:03:51

标签: c++ oop inheritance

我在基类中创建了一个变量,它是模板的向量,但是我无法从派生类中访问此成员,有人可以解释一下吗?

#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

/*
 * 
 */
template <typename T>
class Apple{
protected:
public:
    vector<T> vec;
    virtual void foo(T node) =0;
};

template <typename T>
class Ball:public Apple<T>{
public:
    void foo(T node){
        cout<<"hahaha\n";
        vec.push_back(node);/* I GET COMPILATION ERROR HERE"vec was not declared in this scope"*/
    }
};

int main(int argc, char** argv) {
    Ball<int> b;
    b.foo(10);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

成员vec是模板参数dependent type,因此编译器需要一些帮助,如:

this->vec.push_back(node);

或使用限定名称:

Apple<T>::vec.push_back(node)

感谢@Avran Borborah - Why am I getting errors when my template-derived-class uses a member it inherits from its template-base-class?

  

以下是规则:在查找非依赖名称(如B<T>)时,编译器不会查找依赖基类(如f)。

     

这并不意味着继承不起作用。 ...

答案 1 :(得分:0)

您尚未在基类中创建任何私有成员。 要解决该错误,您可以使用以下命令替换产生编译错误的行: 苹果:: vec.push_back(节点); 要么 这 - &GT; vec.push_back(节点)