C++ C++;模板实例化指针空错误
我想写我自己版本的stack,这是我所拥有的:C++ C++;模板实例化指针空错误,c++,class,templates,pointers,instantiation,C++,Class,Templates,Pointers,Instantiation,我想写我自己版本的stack,这是我所拥有的: template<class myStackType> class myStackClass { myStackType array[1000]; int size; public: myStackClass() { size = 0; } void pop() { size--; } void push(myStackType a)
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);
}
};
模板类myStackClass
{
myStackType数组[1000];
整数大小;
公众:
myStackClass()
{
尺寸=0;
}
void pop()
{
大小--;
}
无效推送(a型)
{
数组[大小]=a;
大小++;
}
myStackType top()
{
返回数组[size-1];
}
bool empty()
{
返回(大小==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;
结构等级
{
int mid;
int最终版本;
字符串名;
等级(int mid1=0,int final1=0,字符串名称1=0)
{
mid=mid1;
最终=最终1;
name=name1;
}
};
myStack类myStack;
我得到一个调试断言失败:无效的空指针
另一方面,std::stack在具有相同数据类型的同一点上工作得很好
我做错了什么
谢谢 您正在为构造函数中的字符串指定0。这就是问题所在。编译器正在尝试将0解释为char*,i。EC型字符串。但由于它是0,因此被解释为空指针
您可能还需要执行一些错误检查,以确保堆栈不会溢出,或者不会尝试弹出空堆栈。您正在为构造函数中的字符串指定0。这就是问题所在。编译器正在尝试将0解释为char*,i。EC型字符串。但由于它是0,因此被解释为空指针
您可能还需要执行一些错误检查,以确保堆栈不会溢出,或者不会尝试弹出空堆栈。您正在为构造函数中的字符串指定0。这就是问题所在。编译器正在尝试将0解释为char*,i。EC型字符串。但由于它是0,因此被解释为空指针
您可能还需要执行一些错误检查,以确保堆栈不会溢出,或者不会尝试弹出空堆栈。您正在为构造函数中的字符串指定0。这就是问题所在。编译器正在尝试将0解释为char*,i。EC型字符串。但由于它是0,因此被解释为空指针 您可能还需要执行一些错误检查,以确保堆栈不会溢出,或者不会尝试弹出空堆栈。这是错误的:
string name1 = 0
它试图从const char*
构造字符串,该字符串为0
——这是不允许的。你可能是说:
string name1 = ""
这是错误的:
string name1 = 0
它试图从const char*
构造字符串,该字符串为0
——这是不允许的。你可能是说:
string name1 = ""
这是错误的:
string name1 = 0
它试图从const char*
构造字符串,该字符串为0
——这是不允许的。你可能是说:
string name1 = ""
这是错误的:
string name1 = 0
它试图从const char*
构造字符串,该字符串为0
——这是不允许的。你可能是说:
string name1 = ""
如果我没有错的话,堆栈会随着用户插入的越来越多而增长。为什么要让它最多有1000个元素?如果我没有错的话,堆栈会随着用户插入的越来越多而增长。为什么要让它最多有1000个元素?如果我没有错的话,堆栈会随着用户插入的越来越多而增长。为什么要让它最多有1000个元素?如果我没有错的话,堆栈会随着用户插入的越来越多而增长。为什么要使它最多包含1000个元素?就是这样,谢谢-尽管现在我不明白为什么它使用std::stack而不是我的。。哦,好吧,谢谢,这取决于stack类如何分配其存储。如果std::stack使用的是一个T*,则不需要在其构造函数中实际分配任何T。您使用的是一个数组,所以如果我没有记错的话,存储中的每个元素都将被初始化,T()将被调用,是的,然后字符串=nullptr将发生并崩溃,就是这样,谢谢-尽管现在我不明白为什么它与std::stack而不是我的工作。。哦,好吧,谢谢,这取决于stack类如何分配其存储。如果std::stack使用的是一个T*,则不需要在其构造函数中实际分配任何T。您使用的是一个数组,所以如果我没有记错的话,存储中的每个元素都将被初始化,T()将被调用,是的,然后字符串=nullptr将发生并崩溃,就是这样,谢谢-尽管现在我不明白为什么它与std::stack而不是我的工作。。哦,好吧,谢谢,这取决于stack类如何分配其存储。如果std::stack使用的是一个T*,则不需要在其构造函数中实际分配任何T。您使用的是一个数组,所以如果我没有记错的话,存储中的每个元素都将被初始化,T()将被调用,是的,然后字符串=nullptr将发生并崩溃,就是这样,谢谢-尽管现在我不明白为什么它与std::stack而不是我的工作。。哦,好吧,谢谢,这取决于stack类如何分配其存储。如果std::stack使用的是一个T*,则不需要在其构造函数中实际分配任何T。您使用的是一个数组,所以如果我没记错的话,存储中的每个元素都将被初始化,T()将被调用,是的,然后字符串=nullptr将发生,崩溃随之发生