Using ostream as a reference (C++)

user212562 picture user212562 · Nov 18, 2010 · Viewed 9.5k times · Source

I have a homework assignment where the header file is provided to us, and is unchangeable. Im having trouble figuring out how to correctly use a "display" function, so here is the relevant code.

The header file:

#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

Here is my implementation of the function "display":

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

And here is my driver:

#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();
}

The error I am receiving says that in my driver, I am not using the correct parameters. I understand this because the .h file uses ostream& as a parameter. My question is, what do I use in my driver file when calling "display" as a good parameter?

Answer

icecrime picture icecrime · Nov 18, 2010

As you said, the display expects a parameter of type std::ostream &.

In your display method implementation, you are outputting in std::cout which defies the logic of receiving the output stream as a parameter to the method. Here, the point of the parameter is that the display caller will be able to provide the output stream of his choice. If his choice happens to be the standard output, he will write :

x.display(std::cout);

This means that your display implementation should only output in the Out parameter and not std::cout.

Also note that :

  • Your display implementation returns a value, which it shouldn't (void return type)
  • I use the std:: prefix in my answer for clarity, but they are not required in your case as the header file contains a using namespace std;.