Вопрос

У меня есть домашнее задание, где файл заголовка предоставляется нам, и является неизменным. У нас проблемы выяснить, как правильно использовать функцию «отображения», поэтому вот соответствующий код.

Файл заголовка:

#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

Вот моя реализация функции «Дисплей»:

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

А вот мой водитель:

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

Ошибка, которую я получаю, говорит, что в моем водителе я не использую правильные параметры. Я понимаю это, потому что файл .h использует o Ostream & как параметр. Мой вопрос в том, что я использую в своем файле драйверов при вызове «отображения» в качестве хорошего параметра?

Это было полезно?

Решение

Как вы сказали, display ожидает параметра типа std::ostream &.

В вашем режиме реализации отображения вы выводятся в std::cout который определяет логику получения выходного потока в качестве параметра к способу. Здесь точка параметра заключается в том, что display Вызыватель сможет предоставить выходной поток его выбора. Если его выбор бывает стандартным выходом, он напишет:

x.display(std::cout);

Это означает, что ваш display Реализация должна производиться только в Out параметр и нет std::cout.

Также обратите внимание, что:

  • Твой display Реализация возвращает значение, которое он не должен (void Тип возврата)
  • Я использую std:: префикс в моем ответе на ясность, но они не требуются в вашем случае, когда файл заголовка содержит using namespace std;.

Другие советы

То, что вам нужно сделать, это замена для всех мест, которые вы использовали Cout. Также пройдите Cout в качестве параметра, такого как X.Display (Cout). Это связано с тем, что Cout не выключен типа OSTream, и все это инициализация выполняется в iostream.

В вашем методе отображения вы ясно используете Cout. Но это «стандартный выход». Метод должен скорее использовать. Таким образом, на дисплее () просто замените каждое возникновение Cout без.

Затем используйте дисплей (Cout); в вашем вызове

Вы не проходите в объекте OSTream. Измените это к этому:

X.display(cout);

Затем в вашем классе замените все вхождения Cout без. Кроме того, функция отображения должна вернуть Const Ostream и вместо void. Вы также должны использовать Const ostream ссылки вместо Ostream.

Стандартно использовать оператор за пределами класса:

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

Таким образом, вы можете делать такие вещи, как:

cout << "This is my set: " << mySet << endl;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top