使用ostream作为参考(C ++)

时间:2010-11-18 16:26:24

标签: c++ pass-by-reference ostream

我有一个家庭作业,其中头文件提供给我们,并且是不可更改的。我无法弄清楚如何正确使用“显示”功能,所以这里是相关的代码。

标题文件:

#ifndef SET_
#define SET_

typedef int EType;

using namespace std;

#include <iostream>

class Set
{
  private:

    struct Node
    {
      EType Item;     // User data item
      Node * Succ;    // Link to the node's successor
    };

    unsigned Num;     // Number of user data items in the set
    Node * Head;      // Link to the head of the chain

  public:

    // Various functions performed on the set

    // Display the contents of the set
    //
    void display( ostream& ) const;

};

#endif

这是我对“display”函数的实现:

void Set::display( ostream& Out ) const
{
  Node * temp = Head;
  cout << "{ ";
  while( temp != NULL )
  {
  cout << temp << ", ";
  temp = temp->Succ;
  return Out;
  }
}

这是我的司机:

#include <iostream>
#include <iomanip>
#include "/user/cse232/Projects/project08.set.h"

using namespace std;

int main()
{
  Set X;
  X.insert(10);
  X.insert(20);
  X.insert(30);
  X.insert(40);
  X.display();
}

我收到的错误说在我的驱动程序中,我没有使用正确的参数。我理解这一点,因为.h文件使用ostream&amp;作为参数。我的问题是,在将“display”作为一个好参数调用时,我在驱动程序文件中使用了什么?

4 个答案:

答案 0 :(得分:11)

正如您所说,display需要std::ostream &类型的参数。

在你的显示方法实现中,你输出std::cout,这违反了接收输出流的逻辑作为方法的参数。这里,参数的要点是display调用者将能够提供他选择的输出流。如果他的选择恰好是标准输出,他会写:

x.display(std::cout);

这意味着您的display实施应仅在Out参数中输出,而不是std::cout

另请注意:

  • 您的display实现返回一个值,它不应该返回(void返回类型)
  • 为了清楚起见,我在答案中使用了std::前缀,但在您的情况下不需要它们,因为标题文件包含using namespace std;

答案 1 :(得分:0)

您需要做的是替换您使用cout的所有地方。同时将cout作为参数传递给x.display(cout)。这是因为,cout是关闭类型的ostream,所有这些初始化都是在iostream中完成的。

答案 2 :(得分:0)

在您的显示方法中,您明确使用cout。但这是“标准出局”。该方法应该使用Out。所以在display()中,只需用Out替换每次出现的cout。

然后使用display(cout); 在你的电话中

答案 3 :(得分:0)

您没有传入ostream对象。将其更改为:

X.display(cout);

然后在你的班级中将所有出现的cout替换为Out。 此外,显示功能应该返回一个const流量&amp;而不是无效。您还应该使用const ostream引用而不是ostream。

在课堂外使用操作员是标准的:

const ostream & operator<< (const ostream & Out, const Set & set)
{
  // display your Set here using out, not cout
  return out;
}

这样你可以做以下事情:

cout << "This is my set: " << mySet << endl;