You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:35:17