c++求助:简单栈错误5 error C2664: 'pop' : cannot convert parameter 1 from 'Cstack' to 'Cstack * 5
using namespace std;
class Cstack
{
public:
int m_a[4];
int top;
};
void initialize(Cstack* &a)
{
a=(Cstack*)malloc(sizeof(Cstack));
a->top=-1;
}
int push(Cstack* &a,int e)
{
if(a->top==3)
return 0;
a->top++;
a->m_a[a->top]=e;
return 1;
}
int pop(Cstack* &a,int e)
{
if(a->top==-1)
return 0;
e=a->m_a[a->top];
a->top--;
return 1;
}
void get(Cstack* &a)
{
for(int i=a->top;i<-1;i--)
cout<<a->m_a[i];
}
int main()
{
Cstack a;
int e;
initialize(a);
pop(a,20);
pop(a,16);
pop(a,4);
pop(a,10);
get(a);
push(a,e);
get(a);
return 0;
}
我把Cstack a改成Cstack *a程序可以运行了,我又发现出栈和入栈位置写反了= =,改过来后调试发现:
入栈时:
a->top++;这条语句可以运行
a->m_a[a->top]=e;这条语句不能运行
该怎么改呢?求教大神啊 展开
2015-01-11
应该是函数参数传递有问题,它说该 传指针的参数你没有按指针方式 传,你找到出问题的那行 自己改下就行了。
看了你的程序有两个问题:
int pop函数有误,参数中e应该设为引用类型,否则值传递是修改不了e的值
void get函数有误,循环时的条件for(int i=a->top;i<-1;i--)
修改为for(int i=a->top;i>-1;i--)
另外,你的函数参数都是指针的引用,所以在传递参数时应该也是指针类型,所以Cstack a不行
修改后的程序:
#include<iostream>
using namespace std;
class Cstack
{
public:
int m_a[4];
int top;
};
void initialize(Cstack* &a)
{
a = (Cstack*)malloc(sizeof(Cstack));
a->top = -1;
}
int push(Cstack* &a, int e)
{
if (a->top == 3)
return 0;
a->top++;
a->m_a[a->top] = e;
return 1;
}
int pop(Cstack* &a, int &e)//pop功能和push功能颠倒了,e为引用类型
{
if (a->top == -1)
return 0;
e = a->m_a[a->top];
a->top--;
return 1;
}
void get(Cstack* &a)
{
for (int i = a->top; i>-1; i--)//判断条件写错了
cout << a->m_a[i]<<" ";
}
int main()
{
Cstack* a;//修改为指针
int e;
initialize(a);
push(a, 20);
push(a, 16);
push(a, 4);
push(a, 10);
get(a);
pop(a, e);
get(a);
system("pause");
return 0;
}
望采纳!