儿童课无法访问父会员

child class not able to access parent member

本文关键字:访问      更新时间:2023-10-16

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

#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<<"hahahan";
        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;
}

成员 vec是模板参数依赖类型的类型,因此编译器需要一些帮助,例如:

this->vec.push_back(node);

或使用合格名称:

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

感谢@avran Borborah-为什么当我的模板衍生级使用它从其模板base-class继承的成员时,我为什么会遇到错误?

这是规则:查找非依赖性名称(例如f(时,编译器不在依赖的基类(例如B<T>(中。

这并不意味着继承行不通。...

您尚未在基类中创建任何私人成员。为了解决错误,您可以替换产生汇编错误的行,苹果:: vec.push_back(node(;或者this-> vec.push_back(node(