gpt4 book ai didi

c++ - 不能引用派生模板类中的基类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:09 26 4
gpt4 key购买 nike

template <class T>class Array
{
protected :
T* data;
int size;
};
template<class T>class Stack : protected Array<T>
{
int top;
public:
Stack(){};

public:
void Push(T x) {data[++top] = x;}
};

为什么在 Push 中说“数据”未在此范围内声明?我怎样才能解决这个问题?当我删除每个 template<T> ,它工作正常。我的模板有问题吗?

最佳答案

你需要:

template <class T>class Array
{
protected :
T* data;
int size;
};
template<class T>class Stack : protected Array<T>
{
int top;
public:
Stack(){};

public:
// void Push(T x) {data[++top] = x;} <-- Won't compile
void Push(T x) {this->data[++top] = x;} // <-- Will compile
// void Push(T x) {Array<T>::data[++top] = x;} <-- Will also compile
};

因为在派生自类模板的类模板的实现中,基本模板的成员必须通过 this 指针或具有基类资质。

关于c++ - 不能引用派生模板类中的基类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41682341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com