我想编写自己的堆栈版本,这就是我所拥有的:
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在具有相同数据类型
的相同位置工作得很好我做错了什么?
谢谢!
答案 0 :(得分:2)
这是错误的:
string name1 = 0
它尝试从string
const char*
构建0
- 这是不允许的。你可能意味着:
string name1 = ""
答案 1 :(得分:1)
您正在为构造函数中的字符串赋值0。这就是错误。编译器试图将0解释为char *,i。即一个C风格的字符串。但由于它是0,因此它被解释为NULL指针。
您可能还需要进行一些错误检查,以确保堆栈不会溢出,或者您不会尝试弹出空堆栈。