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

时间:2013-02-08 16:56:47

标签: c++ class linked-list stack destructor

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

我已经实现了堆栈和quete的功能,但是在尝试编译它们时我收到错误: 在析构函数中`Stack :: ~Stack()' '''令牌之前的预期类名 在他们两个。

以下是通用Stack类:

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

    Stack();

    Stack(const Stack<T>& otherStack);

   ~Stack();
}

List类:

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

    public:

    List();

    List(const List<T>& otherList);

    ~List();
}

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

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

                 list.~List();
}

我在这里做错了什么?

2 个答案:

答案 0 :(得分:7)

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

如果您有一个指针p,作为成员动态分配的对象,然后,您需要通过执行delete p;在析构函数中进行一些清理工作。但在这里,你没有。 list将自动销毁。

答案 1 :(得分:5)

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

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

在你的情况下

list.~List<T>();

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