Domanda

Ho un compito a casa in cui ci viene fornito il file di intestazione ed è immutabile.Ho difficoltà a capire come utilizzare correttamente una funzione di "visualizzazione", quindi ecco il codice pertinente.

Il file di intestazione:

#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

Ecco la mia implementazione della funzione "display":

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

Ed ecco il mio autista:

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

L'errore che ricevo dice che nel mio driver non sto utilizzando i parametri corretti.Lo capisco perché il file .h utilizza ostream& come parametro.La mia domanda è: cosa devo utilizzare nel mio file del driver quando chiamo "display" come parametro valido?

È stato utile?

Soluzione

Come hai detto, il display si aspetta un parametro di tipo std::ostream &.

Nell'implementazione metodo di visualizzazione, si sta stampando su std::cout che sfida la logica di ricevere il flusso di output come parametro al metodo. Qui, il punto del parametro è che il chiamante display sarà in grado di fornire il flusso di uscita di sua scelta. Se la sua scelta sembra essere lo standard output, scriverà:

x.display(std::cout);

Questo significa che l'implementazione display dovrebbe emesso solo nel parametro Out e non std::cout.

Si noti inoltre che:

  • L'implementazione display restituisce un valore, che non dovrebbe (void tipo di ritorno)
  • Io uso il prefisso std:: nella mia risposta per chiarezza, ma non sono necessari nel vostro caso come il file di intestazione contiene un using namespace std;.

Altri suggerimenti

Quello che dovete fare è sostituito per tutti i luoghi che avete usato cout. Anche passare cout come parametro come x.display (cout). Questo perché, cout è spento tipo ostream e tutto questo l'inizializzazione è fatto in iostream.

Nel tuo metodo di visualizzazione, stai utilizzando esplicitamente cout.Ma questo è lo "standard out".Il metodo dovrebbe piuttosto utilizzare Out.Quindi in display(), sostituisci semplicemente ogni occorrenza di cout con Out.

Quindi utilizzare display( cout );nella tua chiamata

Non si passa in un oggetto ostream. Cambiarlo in questo modo:

X.display(cout);

Poi, nella tua classe sostituire tutte le occorrenze di cout con Out. Inoltre, la funzione di visualizzazione dovrebbe restituire un ostream const & anziché vuoto. Si dovrebbe anche essere utilizzando i riferimenti const ostream invece di ostream.

È standard di utilizzare un esterno operatore della classe:

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

In questo modo si possono fare cose come:

cout << "This is my set: " << mySet << endl;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top