Usando ostream como referencia (C ++)
-
26-09-2019 - |
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?
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 unusing 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;