"No match for operator" error in C ++

1

I made this code but I have not the slightest idea why it is giving this error: "No match for 'operator < In the part where I display the user's response ... (Remember that PersonName is a class and Date is also ...)

class Filme
   {
   private:
    string titulo;
    NomePessoa Diretor;
    NomePessoa Personagem;
    Data Lancamento;

   public:

     void getInfo(string t, string d, string p, int dia, int m, int a)
        {
            titulo = t;
            Diretor.Grava(d);
            Personagem.Grava(p);
            Lancamento.getData(dia,m,a);
        };

    void imprime()
        {
            cout << "Titulo: " << titulo << endl ;
            cout << "Nome do Diretor: " << Diretor.Imprime() << endl;
            cout << "Nome do Personagem Principal: " << Personagem.Imprime() << endl;
            cout << "Data do Lançamento: " << Lancamento.sendData() << endl;
        }; 
    
asked by anonymous 17.03.2018 / 02:15

1 answer

2

This error means that the compiler does not know how to write the File object in the indicated stream. This happens because somewhere in your code there is something like:

Filme f;
cout << f;

Since you have not implemented the << operator to Filme , the compiler can not resolve this statement because it does not know how to write a Filme to cout .

However, you already have code that shows Filme in the imprime method, so you just need to implement the << operator using this logic already done:

class Filme
{
   private:
    //...

   public:

     void getInfo(string t, string d, string p, int dia, int m, int a)
     {
         titulo = t;
         Diretor.Grava(d);
         Personagem.Grava(p);
         Lancamento.getData(dia,m,a);
     };

     //aqui implementação do operador <<
     friend ostream& operator << (ostream& os, const Filme& f)
     {
         //O acesso ao Filme é feito pelo segundo parametro que chamei de f
         os << "Titulo: " << f.titulo << endl ;
         os << "Nome do Diretor: " << f.Diretor.Imprime() << endl;
         os << "Nome do Personagem Principal: " << f.Personagem.Imprime() << endl;
         os << "Data do Lançamento: " << f.Lancamento.sendData() << endl;
         return os ;
     }
    
17.03.2018 / 02:41