* a和*a和* a的区别
下面是链栈的部分代码
一开始是push代码中的变量没有定义完全 使用Node<DataType> *s;会报停止运行错 定义完全后就可以执行到底
在LinkStack类中 私有成员 Node<DataType>* top、Node<DataType> *top这么定义,构建没问题 但是运行会报已停止运行框
猜测是析构函数出现错误,把析构函数去掉后就不报错。
但私有成员Node<DataType> * top 这么定义就不会出现错误。

想问一下,这是怎么回事?
#include <iostream>
using namespace std;
template <class DataType>
struct Node{
DataType data;
Node *next;
};
template <class DataType>
class LinkStack{
private:
Node<DataType> * top;
public:
LinkStack(){top=NULL;}
~LinkStack();
void push(DataType x);
DataType pop();
DataType gettop();
int Empty();
};
template <class DataType>
LinkStack<DataType>::~LinkStack(){
Node<DataType> *q = top;
while(q!=NULL){
q = top;
delete q;
top = top -> next;
}
}
template <class DataType>
void LinkStack<DataType>::push(DataType x){
Node<DataType> *s = new Node<DataType>;
//定义变量格式要完全
s -> data = x;
s -> next = top;
top = s;
}
int main(){
cout<<"sdsdsd"<<endl;
LinkStack<string> ls;
cout<<"xxxxxx"<<endl;
ls.push("lzh");
cout<<"sdsd";
cout<<"sldksd";
}
相关推荐
**p与 *&p的区别, 即指向指针的指针和引用指针变量的区别
一份总结“指向指针的指针和引用指针变量区别”的精华笔记,很多人对于**p与 *&p的差别不是很清楚,相信这个笔记可以解决你的疑惑。
const int *a int * const a区别实例
const int *a int * const a 区别 外加实例
深入理解char *a与char a[]的区别
前言 指针和数组存在着一些本质的区别。当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作 为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的。 下面来看看详细的介绍。 char *a = "hello" 中的a是指向第一个字符‘a’的一个指针 char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针 但二者并不相同: 看实例:把两个字符串相加: 结果: 对比: 结果: 把字符串加到指针所指的字串上去,出现段错误,本质原因:*d=”0123456
从go语言中找&和*区别详解
主要介绍了从go语言中找&和*区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
char *a 与char a[] 的区别和char** argv与char *argv[]区别
char *a 与char a[] 的区别 char *a = "hello" 中的a是指向第一个字符‘a'的一个指针 char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针 但二者并不相同: 看实例:把两个字符串相加: 结果: hello0123456789 对比: Segmentat


