感觉初始化栈时有问题,但一直找不出,求指点迷津
#include<iostream>
#define MAX 10
using namespace std;
class Stack{
private:
int arr[MAX];
int top;
public:
void initStack(Stack S);
bool stackFull(Stack S);
bool stackEmpty(Stack S);
void push(Stack S,int x);
int pop(Stack S);
int stackTop(Stack S);
void traverse(Stack S);
};
void Stack::initStack(Stack S)
{
S.top=-1;
}
bool Stack::stackFull(Stack S)
{
if(S.top=MAX) return true;
else return false;
}
bool Stack::stackEmpty(Stack S)
{
if(S.top==-1) return true;
else return false;
}
void Stack::push(Stack S,int x)
{
if(stackFull(S)) cout<<"stackfull"<<endl;
else{
S.top++;
S.arr[S.top]=x;
}
}
int Stack::pop(Stack S)
{
int temp;
if(stackEmpty(S)) cout<<"stackempty"<<endl;
else {
temp=S.arr[S.top];
S.top--;
return temp;
}
}
int Stack::stackTop(Stack S)
{
return S.arr[S.top];
}
void Stack::traverse(Stack S)
{
int i=0;
while(i<=S.top)
cout<<S.arr[i]<<" ";
}
int main()
{
Stack S;
S.initStack(S);
if(S.stackEmpty(S)) cout<<"栈为空"<<endl;
else cout<<"栈不为空"<<endl;
S.push(S,1);
S.push(S,2);
S.push(S,3);
S.push(S,4);
if(S.stackFull(S)) cout<<"栈满了"<<endl;
else cout<<"栈不为满"<<endl;
S.pop(S);
if(S.stackFull(S)) cout<<"栈满了"<<endl;
else cout<<"栈不为满"<<endl;
S.traverse(S);
return 0;
}
if(S.top=MAX) return true;这里错了
试了一试,好神奇啊
1.不用构造函数或者用default构造函数,拷贝构造的时候报错
2.自己写一个无参空构造函数,拷贝构造的时候就不报错了。。。
个人估计可能是因为编译器认为作者写了构造函数有意不初始化变量,才没报错。
所以初始化部分的错误,可以通过写个构造函数解决,最好用初始化列表初始化一下top和arr,这样initStack()函数就不需要了。
另外题主你类里的函数为什么要接收自身的实例,类里面可以直接使用类中的变量(或者this显示调用),不需要传递自己啊。比如这样: