C++ 使用ostream作为参考(C+;+;)
我有一个家庭作业,其中头文件是提供给我们的,是不可更改的。我不知道如何正确使用“显示”功能,所以这里是相关代码 头文件:C++ 使用ostream作为参考(C+;+;),c++,pass-by-reference,ostream,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 N
#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
#ifndef集合_
#定义集_
typedef-int-EType;
使用名称空间std;
#包括
类集
{
私人:
结构体类型
{
EType项;//用户数据项
Node*Succ;//链接到节点的后续节点
};
unsigned Num;//集合中用户数据项的数量
Node*Head;//链接到链的头
公众:
//在电视机上执行的各种功能
//显示集合的内容
//
无效显示(ostream&)常数;
};
#恩迪夫
下面是我对“显示”功能的实现:
void Set::显示(ostream&Out)常量
{
节点*温度=头部;
cout正如您所说,显示
需要类型为std::ostream&
的参数
在您的显示方法实现中,您在std::cout
中输出,这违反了将输出流作为方法参数接收的逻辑。这里,参数的要点是display
调用者将能够提供他选择的输出流。如果他的选择恰好是标准输出,他将写:
x.display(std::cout);
这意味着您的显示
实现应该只在Out
参数中输出,而不是std::cout
还请注意:
display
实现返回一个不应该返回的值(void
返回类型)
- 为了清楚起见,我在回答中使用了
std::
前缀,但在您的情况下不需要它们,因为头文件包含使用命名空间std;
您需要做的是替换掉所有使用cout的位置。还可以将cout作为参数传递,如x.display(cout)。这是因为cout是非类型的ostream,所有初始化都在iostream中完成。在显示方法中,您显式使用cout。但这是“标准输出”。该方法应该使用Out。因此,在display()中,只需将cout的每次出现都替换为Out
然后使用显示器(cout);
在调用中,您没有传入ostream对象。请将其更改为:
X.display(cout);
然后在你的类中用Out替换cout的所有出现。
另外,display函数应该返回const-ostream&而不是void。您还应该使用const-ostream引用而不是ostream
在类外使用运算符是标准的:
const ostream & operator<< (const ostream & Out, const Set & set)
{
// display your Set here using out, not cout
return out;
}
const-ostream&operator这是一个很好的新手问题。所有不相关的部分都被删除了,但(几乎)下一次,只需添加确切的错误消息,并指出它指向的精确的行,它就很完美。哦,谢谢解释。我改变了我的实现文件,这样就不用使用CUT+1——使用这样的参数是更好的,因为这允许你的类支持输出到任何其他C++标准。如果我能写自己的头文件,我觉得我的很多项目会更容易,但是我的教授把它们和项目作业一起写,所以我别无选择,只能用另一种方式(然而,关于使用Out而不是cout的部分是我没有想到的,因此感谢您的回答!仅供参考:一旦您开始实际尝试写入ostream,上述代码就不会在我的系统上使用任何编译器(Linux:gcc或icc)编译。ostream的gcc实现不提供操作符的“const”版本
X.display(cout);
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;