C++栈类show()函数调用匹配错误求助
错误原因与解决方法
错误原因
你定义的Stack类成员函数show(int lim)要求接收一个int类型参数,但调用时使用的st.show()没有传递任何参数,编译器找不到无参版本的show()函数,因此抛出no matching function call to stack::show()的匹配错误。
解决方法
提供两种可行的修复方案,按需选择:
方案1:修改调用方式,传递正确参数
由于show函数需要的lim参数对应栈顶的索引(即类内的top成员),但top是私有成员无法直接访问,需先给Stack类添加一个获取top的公共方法:
public: // 添加获取栈顶索引的getter函数 int getTop() const { return top; }
之后在调用时传入获取到的栈顶值:
case 2: { st.show(st.getTop()); break; }
方案2:修改show函数,移除参数依赖
栈自身维护着top成员,完全不需要外部传入参数,直接修改show函数的定义,让它使用类内的top即可:
void show() { int i = top; // 直接使用类内维护的栈顶索引 cout<<"Stack contains --"<<endl; for (int ctr=i; ctr>=0; ctr--) { if (ctr==i) cout<<"\t\t"<<arr_q[ctr]<<"<--Top of Stack"<<endl; else cout<<"\t\t"<<arr_q[ctr]<<endl; } }
此时直接调用st.show()就可以正常运行,这也是更符合面向对象封装原则的方案。
额外优化提示
你的push函数存在栈溢出后仍执行写入的问题,建议添加return避免数组越界:
void push(string subs) { if ((top+1)==MAX) { cout << "Stack Overflow..." << endl; return; // 栈满时直接返回,不执行后续写入操作 } top=top+1; arr_q[top]=subs; }
内容的提问来源于stack exchange,提问作者Otaku Sensei
相关产品推荐
相关产品推荐

