Problema con visual studio

Messaggioda ZfreS » 17/07/2018, 15:59

Nella mia classe Data ho tre file: il main, un header dove ci sono tutti i prototipi e un file cpp con le implementazioni. In paeticolare ho un problema con un operatore ridefinito e con un metodo:
Prototipo del l'operatore ridefinito e del metodo utilizzato:
Codice:
std::ostream& operator<<(std::ostream&, const Data&);
std::string formato_breve();


Implementazione della ridefinizione e del metodo:
Codice:
std::ostream& operator<<(std::ostream& stream, const Data& d)
{
   stream << d.formato_breve();
   return stream;
}

std::string Data::formato_breve()
{
  return std::to_string(giorno) + "/" +
         std::to_string(mese) + "/" +              //giorno, mese e anno sono private
         std::to_string(anno);
}


Main:
Codice:
Data d1{ 2, 1, 2017 };
   cout << d1 << endl;


Visual studio mi dà qusti due errori di compilazione:
Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore C2662 'std::string Data::formato_breve(void)': impossibile convertire il puntatore 'this' da 'const Data' a 'Data &'

Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore C2804 'operator <<' (binario) ha troppi parametri

Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore (attivo) E1086 l'oggetto include qualificatori di tipo non compatibili con la funzione membro funzione "Data::formato_breve"

Potreste aiutarmi a risolverli per favore?
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 691 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Problema con visual studio

Messaggioda claudio86 » 17/07/2018, 17:19

Codice:
std::ostream& operator<<(std::ostream& stream, const Data& d)
{
   stream << d.formato_breve();
   return stream;
}

Stai chiamando la funzione membro 'formato_breve()' su una variabile di tipo 'const Data &', che è un riferimento a un oggetto costante Data. Essendo costante, non puoi modificare le sue variabili membro.
In C++ puoi aggiungere 'const' alla firma di una funzione membro per specificare che tale funzione non può modificare variabili membro (fatta eccezione se dichiarate 'mutable'), e quindi rendere possibile chiamare tale funzione su oggetti costanti.

In breve, aggiungi 'const' alla firma della funzione (sia nel prototipo che nell'implementazione):

Codice:
std::string Data::formato_breve() const // <- aggiungi 'const' qui
{
  return std::to_string(giorno) + "/" +
         std::to_string(mese) + "/" +              //giorno, mese e anno sono private
         std::to_string(anno);
}
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 491 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Problema con visual studio

Messaggioda ZfreS » 17/07/2018, 17:32

Ho fatto come hai detto tu, ma continua a darmi questi errori:

Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore C2804 'operator <<' (binario) ha troppi parametri

Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore (attivo) E0349 nessun operatore "<<" corrispondente agli operandi

Gravità Codice Descrizione Progetto File Riga Stato eliminazione
Errore C2679 '<<' binario: non è stato trovato alcun operatore che accetti un operando destro di tipo 'Data'. È anche possibile che non vi siano conversioni accettabili.
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 693 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Problema con visual studio

Messaggioda claudio86 » 17/07/2018, 18:57

A occhio direi che hai definito l'operatore << come funzione membro della classe Data. Deve essere invece una funzione libera.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 492 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Problema con visual studio

Messaggioda ZfreS » 17/07/2018, 19:10

Grazie mille, ho risolto spostando il prototipo fuori dalla classe.
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 695 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite