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 ausing 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;
精彩评论