Frage

ich eine Hausaufgabe habe, wo die Header-Datei zu uns zur Verfügung gestellt, und ist unveränderlich. Im Schwierigkeiten haben, herauszufinden, wie man richtig eine „Anzeige“ Funktion nutzen, hier so ist der entsprechende Code.

Die Header-Datei:

#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

Hier ist meine Implementierung der Funktion „Anzeige“:

void Set::display( ostream& Out ) const
{
  Node * temp = Head;
  cout << "{ ";
  while( temp != NULL )
  {
  cout << temp << ", ";
  temp = temp->Succ;
  return Out;
  }
}

Und hier ist mein Fahrer:

#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();
}

Die Störung, die ich erhalte, sagt, dass in meinem Fahrer, ich bin die korrekten Parameter nicht verwenden. Ich verstehe das, weil die .h-Datei verwendet ostream & als Parameter. Meine Frage ist, was ich in meiner Treiberdatei verwenden, wenn „Anzeige“ als guten Parameter nennen?

War es hilfreich?

Lösung

Wie Sie sagten, die display erwartet einen Parameter vom Typ std::ostream &.

In Ihrer Anzeigeverfahren Implementierung Sie in std::cout ausgibt, das die Logik der Empfang des Ausgangsstroms als Parameter an die Methode entzieht. Hier ist der Punkt des Parameters, dass der display Anrufer in der Lage sein wird, den Ausgangsstrom seiner Wahl zu bieten. Wenn seine Wahl, um die Standardausgabe sein geschieht, wird er schreiben:

x.display(std::cout);

Dies bedeutet, dass Ihre display Umsetzung sollte nur dann ausgegeben, in dem Out Parameter und nicht std::cout.

Auch beachten:

  • Ihre display Implementierung gibt einen Wert, der sollte es nicht (void Rückgabetyp)
  • Ich verwende den std:: Präfix in meiner Antwort für Klarheit, aber sie sind nicht in Ihrem Fall erforderlich, da die Header-Datei einen using namespace std; enthält.

Andere Tipps

Was Sie tun müssen, ist, dass Sie cout verwendet haben, für alle Orte, ersetzen werden. Auch wird als Parameter wie x.display (cout) cout. Dies liegt daran, cout off-Typ ostream ist und all diese Initialisierung wird in Iostream getan.

In Ihrem Anzeigeverfahren, das Sie verwenden explizit cout. Aber das ist der „Standard-out“. Das Verfahren sollte eher verwenden Out. So in display (), ersetzen Sie einfach jedes Vorkommen von cout mit Out.

Dann bedienbares Display (cout); in Ihrem Anruf

Sie passieren nicht in einem ostream-Objekt. Ändern Sie ihn auf diese:

X.display(cout);

Dann in Ihrer Klasse alle Vorkommen von cout mit Out ersetzen. Auch sollte die Anzeigefunktion einen const ostream & statt Leere zurück. Sie sollten auch const Ostream Referenzen statt Ostream werden.

Es ist Standard einen Operator außerhalb der Klasse zu verwenden:

const ostream & operator<< (const ostream & Out, const Set & set)
{
  // display your Set here using out, not cout
  return out;
}

Auf diese Weise Sie tun können, Dinge wie:

cout << "This is my set: " << mySet << endl;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top