|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 5202
|
[C++] ridefinizione operatore standard output
Ciao a tutti,
sono incappato in un errore che non riesco a correggere vi posto direttamente il codice. è un esempio molto stupido di una classe, non guardate ad esempio in che modo viene fatta la somma, è ridotto tutto a livelli molto semplici per isolare il più possibile l'errore (la stessa classe in sè è una vera idiozia ma la uso per trovare facilmente gli errori) allora, come prima cosa ho ridefinito l'operatore somma: Codice:
reali operator+(reali x, reali y) {
int num=(x.numero()+y.numero());
int dec=(x.decimale()+y.decimale());
reali aux(num,dec);
return aux;
}
Codice:
ostream& operator<<(ostream& os, reali& x) {
return os<<x.numero()<<"."<<x.decimale()<<endl;
}
il problema è l'operatore <<. se scrivo cout<<y; funziona senza problemi. se scrivo cout<<y+z; invece dà una sfilza di errori.... del tipo "no match for operator<< in std:cout<<operator+(y,z) e nn capisco perchè la somma è definita e funziona, il << è definito e funziona, perchè se combino le due cose non funziona? mi sono dimenticato di qualcosa? grazie mille a chi mi sarà d'aiuto |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jul 2003
Città: pisa
Messaggi: 141
|
intanto prova a mettere
Codice:
ostream& operator<<(ostream& os, const reali& x) {
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 5202
|
ho già provato, se metto const non compila in nessun caso, dice
"passing 'const reali' at 'this' argument of int reali::numero() discards qualifier" la stessa cosa per reali::decimale() |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Codice:
goku@big:/tmp$ cat test.cpp
#include <iostream>
class reali
{
private:
int m_numero, m_decimale;
public:
int numero(void) const { return m_numero; }
int decimale(void) const { return m_decimale; }
reali(int numero, int decimale):
m_numero(numero), m_decimale(decimale) {}
};
std::ostream& operator <<(std::ostream& os, const reali& r)
{
return os << r.numero() << "." << r.decimale();
}
reali operator +(const reali& a, const reali& b)
{
return reali(a.numero() + b.numero(),
a.decimale() + b.decimale());
}
int main(void)
{
reali a(1, 2);
reali b(2, 4);
std::cout << a + b << std::endl;
}
goku@big:/tmp$ g++ test.cpp -Wall
goku@big:/tmp$ ./a.out
3.6
goku@big:/tmp$
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 5202
|
grazie a tutti, ci sono arrivato pure io
mancava il const... mettendelo e dichiarando const anche i due metodi implicati nell'operator<< (che in effetti hanno tutti i motivi per esserlo) compila correttamente |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:28.



















