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& をパラメーターとして使用しているため、これは理解できます。私の質問は、適切なパラメーターとして "display" を呼び出すときに、ドライバー ファイルで何を使用すればよいかということです。

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 を使用したすべての場所を置き換えることです。また、x.display(cout) のように 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 に置き換えます。また、表示関数は void ではなく const ostream & を返す必要があります。また、ostream の代わりに const 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 に答える