0

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

错误消息是“错误:预期的';' 在 '<' 标记之前"

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

4

4 回答 4

6

标准库stack位于std命名空间中,因此您需要适当地限定名称:

std::stack<int>* head;

您应该考虑使用 anstd::list<std::stack<int>>而不是您的类。

于 2012-10-08T13:43:31.000 回答
5

模板的正确名称是std::stack.

如果你想要的只是一个堆栈列表,你总是可以使用std::list<std::stack<int>>, 顺便说一下(或者std::forward_list如果你只需要前向遍历)。但是,即使您追求自己的设计,也可能没有理由不能使堆栈成为直接类成员。

于 2012-10-08T13:41:59.977 回答
1

也许你应该说std::stack

std::stack<int>* head;反而stack<int>* head;

于 2012-10-08T13:42:22.077 回答
0

如果您使用std库,则必须放在std::std 对象之前或将 ausing 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指针。

于 2012-10-08T13:47:52.880 回答