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 に答える