我正在开发一个需要列表(单独)堆栈的项目。我创建了一个名为“stacklist”的类,就是堆栈列表。我希望类有一个指向列表头部的堆栈指针。但是,每当我尝试构建类时,我都会收到错误。
#ifndef STACKLIST_H
#define STACKLIST_H
#include <stack>
//source: Data Structures Using C++: Linked List Implementation Part II (List Class)
//url: http://www.youtube.com/watch?feature=endscreen&NR=1&v=7vZo17iv1zQ
class stacklist
{
public:
stacklist();
void addToHead(const int&);
void printList();
void insert(const int&);
private:
stack<int>* head; //THIS IS WHERE I AM HAVING THE PROBLEM
int size;
};
#endif // STACKLIST_H
错误消息是“error:expected';'在'&lt;'之前标记“
可以提供的任何见解都将受到高度赞赏。
答案 0 :(得分:6)
标准库stack
位于std
命名空间中,因此您需要适当地限定名称:
std::stack<int>* head;
您应该考虑使用std::list<std::stack<int>>
而不是您的班级。
答案 1 :(得分:5)
模板的正确名称为std::stack
。
如果你想要的只是一个堆栈列表,顺便说一下你可以使用std::list<std::stack<int>>
(如果只需要正向遍历,则可以std::forward_list
)。但即使你追求自己的设计,也没有理由不能让这个堆栈成为直接的类成员。
答案 2 :(得分:1)
也许您应该说std::stack
std::stack<int>* head;
代替stack<int>* head;
答案 3 :(得分:0)
如果您使用的是std
个库,则必须将std::
放在std对象之前,或者在源文件的开头放置using namespace std
:
#include <stack>
using namespace std; // This line brings std stuff into the current namespace.
或者:
std::stack<int>* head;
如果你的文件是标题,那么第一个标题比第二个标题更好,因为using
指令将扩展到包含StackList.h
的所有文件
这个问题没有提及,但我认为值得一提:将指针用于类是非常危险的,因为你必须把它放到所有构造函数中(默认和复制)并且也要关注析构函数。
修改课程设置,并考虑是否可以使用std::stack
实例代替std::stack
指针。