开发者

Using ostream as a reference (C++)

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 thi开发者_运维技巧s 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?


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;.


What you need to do is substitute out for all the places you have used cout. Also pass cout as a parameter like x.display(cout). This is because, cout is off type ostream and all this initialization is done in iostream.


In your display method, you are explicitly using cout. But this is the "standard out". The method should rather use Out. So in display(), just replace every occurrence of cout with Out.

Then use display( cout ); in your call


You aren't passing in an ostream object. Change it to this:

X.display(cout);

Then in your class replace all occurrences of cout with Out. Also, the display function should return a const ostream & instead of void. You should also be using const ostream references instead of ostream.

It is standard to use an operator outside of the class:

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

This way you can do things like:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜