【问题标题】:c++ ostream return data from objects arrayc ++ ostream从对象数组返回数据
【发布时间】:2017-12-26 15:14:31
【问题描述】:

我的 ostream 有以下源代码

ostream& operator << (ostream& os, AnimalsDirectory& a) {
   for(int i=0;i<a.directorySize;i++) {
      return os << a.animals[i];
   }
}

当我编译这段代码时,它会产生以下错误:

ContactDir.cpp:64:1: warning: control may reach end of non-void 
function
  [-Wreturn-type]
}
^

我不知道为什么会发生这个错误,我在对象动物数组上执行此操作,并希望 '

【问题讨论】:

  • c.directorySize?我在您的operator &lt;&lt; 中看不到任何c 对象此外,第一个return 语句将终止您的循环,您将返回a.animals[0]
  • @Fureeish 我在上面修好了,有一个
  • 那么如何循环所有对象并返回有关它的数据?
  • return os &lt;&lt; a.animals[i]; 在循环的第一次迭代中,这将从函数返回。不幸的是,如果 directorySize 为 0,这将永远不会执行,并且循环结束,但该函数不会显式返回任何内容。这就是您的编译器所抱怨的。这个return 语句显然是错误的,你的意思是打印数组中的每个元素,而不返回,并在末尾有一个return 语句。
  • 你“不知道”到底是什么?除了最初编写此代码所需的知识之外,这里没有任何其他知识需要任何其他知识。

标签: c++ ostream


【解决方案1】:

看看你想要实现的操作符方法是如何声明的。 您必须返回对 ostream 对象的引用,这是您在第一个参数中获得的对象。

其次,您的循环中有一个 return 语句,它将在第一个循环周期中退出该函数。你可能想要做的是这样的事情

ostream& operator << (ostream& os, AnimalsDirectory& a) {
    for(int i=0;i<a.directorySize;i++) {
       os << a.animals[i];
    }
    return os;
}

这要求每个动物对象也实现了

【讨论】:

    【解决方案2】:
       for(int i=0;i<a.directorySize;i++) {
          return os << a.animals[i];
       }
    

    让我们看看.. 如果a.directorySize == 0?,那么i &lt; a.directorySizei = 0 是假的,这意味着循环永远不会运行,这意味着不会到达return 语句。这会调用未定义的行为,因为在循环之后没有任何内容可以返回。为此,编译器会发出警告。

    此外,至少可以说您的代码看起来很奇怪,您通常从不循环只是为了无条件返回。

    【讨论】:

    • 好的,那你更喜欢我什么?您对实施有任何想法吗?
    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 2021-01-30
    • 1970-01-01
    • 2021-08-09
    • 2019-01-18
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多