C ++模板实例化指针null错误

时间:2013-10-23 19:00:26

标签: c++ class templates pointers instantiation

我想编写自己的堆栈版本,这就是我所拥有的:

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在具有相同数据类型

的相同位置工作得很好

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

这是错误的:

string name1 = 0

它尝试从string const char*构建0 - 这是不允许的。你可能意味着:

string name1 = ""

答案 1 :(得分:1)

您正在为构造函数中的字符串赋值0。这就是错误。编译器试图将0解释为char *,i。即一个C风格的字符串。但由于它是0,因此它被解释为NULL指针。

您可能还需要进行一些错误检查,以确保堆栈不会溢出,或者您不会尝试弹出空堆栈。