0

独自のバージョンのスタックを書きたいのですが、これが私が持っているものです:

template<class myStackType> class myStackClass
{
    myStackType array[1000];
    int size;
public:
    myStackClass()
    {
        size = 0;
    }
    void pop()
    {
        size--;
    }
    void push(myStackType a)
    {
        array[size] = a;
        size++;
    }
    myStackType top()
    {
        return array[size-1];
    }
    bool empty()
    {
        return(size == 0);
    }
};

でも実際に使ってみると

struct grade
{    
    int mid;
    int final;
    string name;
    grade(int mid1 = 0, int final1 = 0, string name1 = 0)
    {
        mid = mid1;
        final = final1;
        name = name1;
    }
};

myStackClass<grade> myStack;

debug assertion failed: invalid null pointer というメッセージが表示されます

一方、 std::stack は同じデータ型の同じ場所で問題なく動作します

私は何を間違っていますか?

ありがとう!

4

2 に答える 2

2

これは間違っています:

string name1 = 0

- であるastringから aを構築しようとしますが、これは許可されていません。あなたはおそらく次のことを意味していました:const char*0

string name1 = ""
于 2013-10-23T19:04:28.837 に答える
1

コンストラクターで文字列に 0 を割り当てています。それがバグです。コンパイラは 0 を char *、つまり C スタイルの文字列として解釈しようとしています。しかし、これは 0 であるため、NULL ポインターとして解釈されます。

スタックがオーバーフローしないようにするため、または空のスタックから飛び出そうとしないようにするために、いくつかのエラー チェックを行うこともできます。

于 2013-10-23T19:04:16.483 に答える