1

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

错误:“无法将 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;
}
4

2 回答 2

2

问题在于您的尺寸方法。您必须返回右值或文字。在不同的设置中查看此帖子以了解相同的问题。

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

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

if (!stackData.checkEmpty())

if (stackData.checkEmpty()== false)

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

于 2013-09-28T20:28:02.993 回答
0

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

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

于 2013-09-28T20:35:35.510 回答