C++派生类

发布于 2024-12-12 00:06:51 字数 526 浏览 0 评论 0原文

我有一个类(Queue),它继承自一个名为 Stack 的类。 它是这样的:

template <class T> class Stack
{
         public:
                virtual const T pop();
                 LinkedList<T> lst;
};

template <class T> class Queue : public Stack<T>
{
         public:
                virtual const T pop();
};

template <class T> const T Queue<T>::pop()
{
                             const T val = lst[0];
                             return val;
}

编译器说“lst undecleared”......为什么?

I have a class (Queue) which inherits from a class named Stack.
it goes like this:

template <class T> class Stack
{
         public:
                virtual const T pop();
                 LinkedList<T> lst;
};

template <class T> class Queue : public Stack<T>
{
         public:
                virtual const T pop();
};

template <class T> const T Queue<T>::pop()
{
                             const T val = lst[0];
                             return val;
}

The compiler says "lst undecleared"...why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若有似无的小暗淡 2024-12-19 00:06:51

因为 lst 是基类 Stack 的成员,而基类 StackT 的依赖类型。在模板完全实例化之前,编译器无法检查依赖类型。您必须通过编写 Stack::lst 让编译器知道 lst 是此类基类的一部分。

正如评论中提到的,this->lst 也是一个可行的解决方案。然而,人们可能会删除 this 因为认为不必要。 Stack::lst 这样看起来更明确。

Because lst is a member of the base class Stack<T> which is a dependent type on T. The compiler can't check dependent types until the template is fully instantiated. You have to let the compiler know that lst is part of such base class by writing Stack<T>::lst.

As its mention in comments, this->lst is also a viable solution. However, people are likely to remove the this as seen unnecessary. Stack<T>::lst seems more explicit in this way.

我恋#小黄人 2024-12-19 00:06:51

尝试使用 this->lst 而不是 lst

Try this->lst instead of lst.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文