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?

Était-ce utile?

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 une using 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top