Pregunta

Tengo una tarea donde el archivo de cabecera se proporciona a nosotros, y no se puede cambiar. Im teniendo problemas para encontrar la manera de utilizar correctamente la función de "pantalla", por lo que aquí está el código correspondiente.

El archivo de cabecera:

#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

Aquí está mi implementación de la función "pantalla":

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

Y aquí es mi conductor:

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

El error que estoy recibiendo dice que en mi conductor, no estoy utilizando los parámetros correctos. Yo entiendo esto porque el archivo .h utiliza ostream y como parámetro. Mi pregunta es, ¿qué es lo que utilizo en mi archivo del controlador cuando se llama "pantalla" como parámetro buena?

¿Fue útil?

Solución

Como usted ha dicho, la display espera un parámetro de tipo std::ostream &.

En nuestra implementación del método de visualización, está dando salida en std::cout que desafía la lógica de recibir el flujo de salida como parámetro para el método. Aquí, el punto del parámetro es que la persona que llama display será capaz de proporcionar el flujo de salida de su elección. Si su elección pasa a ser la salida estándar, escribirá:

x.display(std::cout);

Esto significa que su aplicación sólo debe display de salida en el parámetro Out y no std::cout.

También tenga en cuenta que:

  • Su aplicación display devuelve un valor, que no debería (void tipo de retorno)
  • I utilizar el prefijo std:: en mi respuesta para mayor claridad, pero no se requiere en su caso ya que el archivo de cabecera contiene un using namespace std;.

Otros consejos

Lo que hay que hacer es sustituir a cabo para todos los lugares que ha utilizado cout. También pasar cout como un parámetro como x.display (cout). Esto se debe a que, cout está apagado tipo ostream y todo esto se hace en la inicialización iostream.

En el método de visualización, se utiliza de forma explícita cout. Pero esta es la "salida estándar". El método debe utilizar en lugar de salida. Así que en la pantalla (), basta con sustituir cada ocurrencia de cout con Out.

display uso Entonces (cout); en su llamada

No está de paso en un objeto ostream. Cambiarlo a esto:

X.display(cout);

A continuación, en la clase de reemplazar todas las apariciones de cout con Out. Además, la función de visualización debe devolver un ostream const y en lugar de vacío. También debe ser el uso de referencias const ostream en lugar de ostream.

Es estándar para usar un exterior operador de la clase:

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

De esta manera usted puede hacer cosas como:

cout << "This is my set: " << mySet << endl;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top