11

我有一个家庭作业,其中头文件提供给我们,并且是不可更改的。我无法弄清楚如何正确使用“显示”功能,所以这里是相关代码。

头文件:

#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

这是我对“显示”功能的实现:

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& 作为参数。我的问题是,当调用“显示”作为一个好的参数时,我在我的驱动程序文件中使用什么?

4

4 回答 4

11

如您所说,display期望 type 的参数std::ostream &

在您的显示方法实现中,您正在输出std::cout其中违反接收输出流作为方法参数的逻辑。在这里,参数的重点是display调用者将能够提供他选择的输出流。如果他的选择恰好是标准输出,他会写:

x.display(std::cout);

这意味着您的display实现应该只输出Out参数而不是std::cout.

另请注意:

  • 您的display实现返回一个不应该返回的值(void返回类型)
  • 为了清楚起见,我在答案中使用了std::前缀,但在您的情况下不需要它们,因为头文件包含using namespace std;.
于 2010-11-18T16:30:08.647 回答
0

你需要做的就是替换掉所有你用过 cout 的地方。还将 cout 作为参数传递,例如 x.display(cout)。这是因为,cout 不是 ostream 类型,所有这些初始化都是在 iostream 中完成的。

于 2010-11-18T16:31:05.393 回答
0

在您的显示方法中,您明确使用 cout。但这是“标准输出”。该方法应该使用 Out。因此,在 display() 中,只需将每次出现的 cout 替换为 Out。

然后使用 display( cout ); 在您的通话中

于 2010-11-18T16:31:34.957 回答
0

您没有传入 ostream 对象。将其更改为:

X.display(cout);

然后在您的班级中将所有出现的 cout 替换为 Out。此外,显示函数应该返回一个 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;
}

这样,您可以执行以下操作:

cout << "This is my set: " << mySet << endl;
于 2010-11-18T16:31:45.320 回答