Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;模板实例化指针空错误_C++_Class_Templates_Pointers_Instantiation - Fatal编程技术网

C++ C++;模板实例化指针空错误

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)

我想写我自己版本的stack,这是我所拥有的:

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将发生,崩溃随之发生