Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-11-2005, 11:15   #1
Isomarcus
Senior Member
 
L'Avatar di Isomarcus
 
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;       
}
poi ho ridefinito l'operatore di standard output <<

Codice:
ostream& operator<<(ostream& os, reali& x) {
         return os<<x.numero()<<"."<<x.decimale()<<endl;
         }
l'operatore somma funziona in quanto reali y(3,14), z(3,14), x=y+z; dà il risultato desiderato

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
Isomarcus è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2005, 11:49   #2
pela
Member
 
Iscritto dal: Jul 2003
Città: pisa
Messaggi: 141
intanto prova a mettere
Codice:
ostream& operator<<(ostream& os, const reali& x) {
poi semmai posta gli errori che ti dà...
pela è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2005, 12:19   #3
Isomarcus
Senior Member
 
L'Avatar di Isomarcus
 
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()
Isomarcus è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2005, 13:53   #4
Qu@ker
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$
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 26-11-2005, 14:09   #5
Isomarcus
Senior Member
 
L'Avatar di Isomarcus
 
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
Isomarcus è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
MacBook con M5: il raffreddamento attivo...
Samsung contrasta la crisi delle memorie...
Google Meet arriva su CarPlay: le riunio...
Le 10 migliori offerte Amazon di Pasqua:...
Nuove fotografie dagli astronauti di Art...
La toilette della capsula Orion Integrit...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v