c ++ ostream从对象数组返回数据

时间:2017-12-26 15:14:32

标签: c++ ostream

我的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]
}
^

我不知道为什么会出现这种错误,我是在对象动物阵列上做的,并希望&#39;&lt;&lt;&lt;&lt;&#打印有关此数组具有的所有信息。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

了解如何声明要实现的运算符方法。 您必须返回对ostream对象的引用,该对象是您在第一个参数中获得的对象。

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

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

这要求每个动物对象也具有&lt;&lt; -operator实现

答案 1 :(得分:0)

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

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

此外,您的代码看起来很奇怪,至少可以说,您通常永远不会循环无条件返回。