Pergunta

Eu tenho uma tarefa de casa em que o arquivo de cabeçalho é fornecido para nós e é imutável. Estou tendo problemas para descobrir como usar corretamente uma função "exibição", então aqui está o código relevante.

O arquivo de cabeçalho:

#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

Aqui está minha implementação da função "Display":

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

E aqui está meu motorista:

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

O erro que estou recebendo diz que, no meu driver, não estou usando os parâmetros corretos. Eu entendo isso porque o arquivo .h usa o Ostream e como um parâmetro. Minha pergunta é: o que eu uso no meu arquivo de driver ao chamar "Display" como um bom parâmetro?

Foi útil?

Solução

Como você disse, o display espera um parâmetro do tipo std::ostream &.

Na sua implementação do método de exibição, você está emitindo std::cout que desafia a lógica de receber o fluxo de saída como um parâmetro para o método. Aqui, o ponto do parâmetro é que o display O chamador poderá fornecer o fluxo de saída de sua escolha. Se a escolha dele for a saída padrão, ele escreverá:

x.display(std::cout);

Isso significa que o seu display A implementação deve ser produzida apenas no Out parâmetro e não std::cout.

Observe também que:

  • Sua display A implementação retorna um valor, o que não deveria (void tipo de retorno)
  • Eu uso o std:: prefixo na minha resposta para clareza, mas eles não são necessários no seu caso, pois o arquivo de cabeçalho contém um using namespace std;.

Outras dicas

O que você precisa fazer é substituir todos os lugares que você usou. Passe também o cout como um parâmetro como x.display (cout). Isso ocorre porque o Cout está fora do tipo Ostream e toda essa inicialização é feita no iostream.

No seu método de exibição, você está usando explicitamente Cout. Mas este é o "padrão fora". O método deve preferir usar. Portanto, em exibição (), apenas substitua todas as ocorrências de cout sem.

Em seguida, use o display (cout); em sua chamada

Você não está passando em um objeto de ostream. Mude para isso:

X.display(cout);

Então, em sua classe, substitua todas as ocorrências de cout sem. Além disso, a função de exibição deve retornar um const Ostream e em vez de void. Você também deve usar referências const Ostream em vez de Ostream.

É padrão usar um operador fora da classe:

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

Dessa forma, você pode fazer coisas como:

cout << "This is my set: " << mySet << endl;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top