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

標準ライブラリstackstd名前空間に存在するため、名前を適切に修飾する必要があります。

std::stack<int>* head;

std::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 オブジェクトの前に配置するかusing namespace std、ソース ファイルの先頭にa を配置する必要があります。

#include <stack>
using namespace std; // This line brings std stuff into the current namespace.

または:

std::stack<int>* head;

usingファイルがヘッダーの場合、ディレクティブが含まれるすべてのファイルに分散されるため、2 番目よりも 1 番目の方が適しています。StackList.h

これは質問には言及されていませんが、私は言う価値があると思います.クラスへのポインタを使用することは非常に危険です.すべてのコンストラクタ(デフォルトとコピー)でそれを処理し、デストラクタでも処理する必要があるためです.

クラスの設計を見直して、ポインターstd::stackの代わりにインスタンスを使用できるかどうかを検討してください。std::stack

于 2012-10-08T13:47:52.880 に答える