"预期的类名"...析构函数实现中的问题

mrs*_*ter 4 c++ stack destructor class linked-list

我正在尝试实现堆栈和队列.我还获得了一个代码来测试堆栈和队列(以查看它们各自的功能是否正常工作).

我已经实现了堆栈和quete的函数,但是当我们尝试编译它们时,我得到错误: 在析构函数`Stack :: ~Stack()'期望的类名之前'(''
两个中的标记.

以下是通用的Stack类:

template <class T>
class Stack
{
    List<T> list;
 public:

    Stack();

    Stack(const Stack<T>& otherStack);

   ~Stack();
}
Run Code Online (Sandbox Code Playgroud)

List类:

template <class T>
class List
{
    ListItem<T> *head;

    public:

    List();

    List(const List<T>& otherList);

    ~List();
}
Run Code Online (Sandbox Code Playgroud)

现在List类的析构函数工作得很好.所以记住这一点,我对析构函数的实现是:

template <class T>
Stack<T>::~Stack()
{

                 list.~List();
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

Jos*_*eld 7

你应该(几乎)从不明确地调用析构函数.当你Stack的生命结束时,它会自动调用其成员的析构函数.你不需要做任何事情.list将被自动销毁.

如果你有一个指针,p作为一个成员动态分配的对象,那么你需要在析构函数中做一些清理工作delete p;.但在这里,你没有.list将被自动销毁.

  • +1,放置 - 新实现不能承受= P. (2认同)

pmr*_*pmr 5

您的list成员是自动变量.它的生命周期(它的构造函数和析构函数被调用的时间)由语言管理.一旦包含的对象超出范围,List就会调用析构函数.

也就是说,有正当理由明确地调用析构函数(你没有一个并且你很少会这样做)并且实际上你需要正确地指定类型.

在你的情况下,将是

list.~List<T>();
Run Code Online (Sandbox Code Playgroud)

List 本身是一个模板,而不是一个类型.