使用顶部和空堆栈

Using top with empty stack

本文关键字:堆栈 顶部      更新时间:2023-10-16

所以我有一个自定义堆栈类和一个顶级函数。我正在检查顶部是否为空,但在返回值时遇到一些问题而没有错误。

错误:"无法将 int 转换为 &int"

    dataType &top()
{
    try
    {               
        if (stackData.checkEmpty()== false)
        {
            throw stackData.size();
        }
    }
    catch(...)
    {
        cout << "Stack size is zero. Can not retrieve top " << endl;
        return stackData.size(); //***Where the problem is***
    }
    return stackData.back();
}
int size( ) const
{
    return Size;
}

问题出在您的大小方法上。您必须返回右值或文本。有关不同设置中的相同问题,请参阅此帖子。

评估是否真的需要返回引用,因为当堆栈为空时,引用顶部元素是没有意义的。最好遵循其他人的建议并在空堆栈上调用 top 时引发异常,返回堆栈的大小几乎无法区分空大小写(返回零)与零整数存储在堆栈中时。

作为旁注,为了简洁起见,最好写:

if (!stackData.checkEmpty())

if (stackData.checkEmpty()== false)

因为 checkEmpty() 已经返回了一个布尔值。这只是风格。

stackData.checkEmpty() 读起来就像如果为空,则返回 true,但你测试 false 并抛出这似乎是错误的方式。

你的函数top()有一个返回dataType的签名,但在这种情况下,你返回一个int......你不能这样做。