【问题标题】:I'm returning a value but the compilers tells me "function must return a value"我正在返回一个值,但编译器告诉我“函数必须返回一个值”
【发布时间】:2013-11-25 00:59:20
【问题描述】:

我对 C++ 很陌生,我正在使用数组编写一个堆栈类。我正在尝试编译我的小程序,但出现以下错误:

Stack::pop : function must return a value.

我的功能是这样的:

int pop (){

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


        }

【问题讨论】:

  • 如果您的函数不仅仅是 7 行(包括两行仅是大括号),那么在中间看到 return; 可能是一个挑战。说真的……在寻求帮助之前先校对你的代码。然后再做一次。

标签: c++ arrays stack


【解决方案1】:

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

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

不返回任何东西。

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

【讨论】:

    【解决方案2】:

    在:

    if (top < 0){
    

    阻止你:

    return ;
    

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

    【讨论】:

      【解决方案3】:
      return;
      

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

      【讨论】:

        【解决方案4】:

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

        return;
        

        不返回值。

        既然你声明你的函数会返回int,你必须这样做。如果不能,则抛出异常。

        【讨论】:

          【解决方案5】:

          您可能应该修改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(删除顶部元素)分开。

          【讨论】:

            最近更新 更多