我正在尝试实现堆栈和队列。我还获得了用于测试堆栈和队列的代码(以查看它们各自的功能是否正常工作)。
我已经实现了 stack 和 quete 的功能,但是在尝试编译它们时出现错误:
在析构函数“Stack::~Stack()”中
'(' 标记前的预期类名
在他们两个。
以下是通用的 Stack 类:
template <class T>
class Stack
{
List<T> list;
public:
Stack();
Stack(const Stack<T>& otherStack);
~Stack();
}
列表类:
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();
}
我在这里做错了什么?
最佳答案
你应该(几乎)永远不要显式地调用析构函数。当您的 Stack
生命结束时,它会自动调用其成员的析构函数。你不需要做任何事情。 list
会自动销毁。
如果你有一个指针,p
,作为成员指向一个动态分配的对象,那么你需要在析构函数中做一些清理工作,方法是 删除 p;
。但在这里,你没有。 list
会自动销毁。
关于c++ - "Expected class-name"...析构函数实现中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777533/