Utilisation ostream comme référence (C ++)
-
26-09-2019 - |
Question
J'ai un devoir dans lequel le fichier d'en-tête nous est fourni et est inchangeable. Im de la difficulté à trouver comment utiliser correctement une fonction « d'affichage », est donc ici le code correspondant.
Le fichier d'en-tête:
#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
Voici mon implémentation de la fonction « affichage »:
void Set::display( ostream& Out ) const
{
Node * temp = Head;
cout << "{ ";
while( temp != NULL )
{
cout << temp << ", ";
temp = temp->Succ;
return Out;
}
}
Et voici mon chauffeur:
#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'erreur que je reçois dit que dans mon chauffeur, je ne suis pas en utilisant les paramètres corrects. Je comprends cela parce que le fichier .h utilise ostream et comme paramètre. Ma question est, que dois-je utiliser dans mon dossier de pilote lors de l'appel « affichage » comme un bon paramètre?
La solution
Comme vous l'avez dit, le display
attend un paramètre de type std::ostream &
.
Dans votre implémentation de la méthode d'affichage, vous restituent dans std::cout
qui défie la logique de réception du flux de sortie en tant que paramètre à la méthode. Ici, le point du paramètre est que l'appelant display
sera en mesure de fournir le flux de sortie de son choix. Si son choix se trouve être la sortie standard, il écrira:
x.display(std::cout);
Cela signifie que votre mise en œuvre de display
devrait uniquement la sortie dans le paramètre Out
et non std::cout
.
Notez également que:
- Votre implémentation
display
renvoie une valeur, il ne devrait pas (void
type de retour) - J'utilise le préfixe
std::
dans ma réponse pour plus de clarté, mais ils ne sont pas nécessaires dans votre cas que le fichier d'en-tête contient uneusing namespace std;
.
Autres conseils
Ce que vous devez faire est de remplacer pour tous les endroits que vous avez utilisés Cout. Aussi passer cout en tant que paramètre comme x.display (Cout). En effet, Cout se trouve hors de type ostream et tout cela se fait dans l'initialisation iostream.
Dans votre méthode d'affichage, vous utilisez explicitement Cout. Mais c'est le « hors norme ». La méthode devrait plutôt utiliser Out. Ainsi, dans l'affichage (), il suffit de remplacer toutes les occurrences de Cout avec Out.
Alors écran utilisation (Cout); dans votre appel
Vous ne passe pas dans un objet ostream. Changer à ceci:
X.display(cout);
Ensuite, dans votre classe remplacer toutes les occurrences de Cout avec Out. En outre, la fonction d'affichage doit renvoyer une const ostream et au lieu de vide. Vous devez également utiliser des références const ostream au lieu de ostream.
Il est standard d'utiliser un opérateur en dehors de la classe:
const ostream & operator<< (const ostream & Out, const Set & set)
{
// display your Set here using out, not cout
return out;
}
De cette façon, vous pouvez faire des choses comme:
cout << "This is my set: " << mySet << endl;