我正在返回一个值,但编译器告诉我“函数必须返回一个值”

时间:2013-11-12 18:04:36

标签: c++ arrays stack

我是C ++的新手,我正在使用数组编写Stack类。我正在尝试编译我的小程序但是我收到以下错误:

Stack::pop : function must return a value.

我的功能是:

int pop (){

            if (top < 0){
                cout << "The stack is empty";
                return;
            }
            return stk [top--];


        }

5 个答案:

答案 0 :(得分:4)

编译器是正确的。这一行:

return;

不会返回值。

由于您声明您的函数将返回int,因此您必须这样做。如果你不能,就抛出异常。

答案 1 :(得分:3)

您需要在所有情况下都返回一个值

cout << "The stack is empty";
return;

不会返回任何内容。

您需要返回一个在正常使用时永远不会返回的值,或者将return替换为throw

答案 2 :(得分:3)

在:

if (top < 0){

阻止你:

return ;

不会像方法指定的那样返回 int

答案 3 :(得分:3)

return;

这不会返回值。你可能想抛出一个异常,表明没有东西可以返回。

答案 4 :(得分:0)

您应该修改pop函数的实现。您的问题如下:

int pop ()
{
    if (top < 0) // how is top negative???
    {
        cout << "The stack is empty";
        return; // doesn't return anything - this is your compiler error
    }
    return stk [top--]; // you probably do not want to use this approach
}

更好的方法可能如下:

int pop ()
{
    if (size == 0)
    {
        throw std::out_of_range("The stack is empty");
    }
    size -= 1;
    int result = stk[size];
    return result;
}

更好的方法是使用链表结构而不是数组结构,或者将top(返回顶部元素)与pop分开(删除顶部元素) )。