我有一个家庭作业,其中头文件提供给我们,并且是不可更改的。我无法弄清楚如何正确使用“显示”功能,所以这里是相关的代码。
标题文件:
#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”作为一个好参数调用时,我在驱动程序文件中使用了什么?
答案 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;