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;

我得到一个调试断言失败:无效的空指针

另一方面,std::stack 在相同数据类型的相同位置工作得很好

我究竟做错了什么?

谢谢!

4

2 回答 2

2

这是错误的:

string name1 = 0

它试图string从 a构造 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 回答