使用STL堆栈作为C ++类的成员

时间:2012-10-08 13:39:34

标签: c++ class stl stack

我正在开发一个需要列表(单独)堆栈的项目。我创建了一个名为“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;'之前标记“

可以提供的任何见解都将受到高度赞赏。

4 个答案:

答案 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指针。