|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1380
|
C++ "Ambiguos overload operator" PERCHE'?
#include <iostream.h>
istream &operator>>( istream &s, bool &b) { int r; s >> r; if (r) b=true; else b=false; return s; } int main() { bool aperto=true; int num_tes,i; List<Tessera> garage; while (aperto) { cout << "Numero di tessera cliente: "; cin >> num_tes; garage.Inserisci(num_tes); cout << "Immettere: 0=Chiusura, 1=Nuovo Cliente"; cin >> aperto; //MI DA ERRORE SU QUESTA LINEA } cout<<"Posto n.\tCliente\n"; for(i=0;i<garage.PostiOccupati();i+) cout<<" "<<i<<"\t\t "<<garage.Posto(i)<<endl; return 0; } poi su manca la parte dove definisco la classe tessera e le varie funzioni AIUTATEMI
__________________
Ho trattato con djgusmy85,andreabiraghi,slimsh@dy,nicolojudo,ekidna,hidro,djeasy,johnf(postprova), stefanonweb(postprova),PuNkEtTaRo,emanuelito,obi_wan,markese,alenter,benjix,superdigi,fra_bo, Lord_Crassus,Andr3a83,mcfour,yeoshuha,lampuga,gargyu,emmedi,ranFart |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1380
|
HELP MEEEEEEEE
__________________
Ho trattato con djgusmy85,andreabiraghi,slimsh@dy,nicolojudo,ekidna,hidro,djeasy,johnf(postprova), stefanonweb(postprova),PuNkEtTaRo,emanuelito,obi_wan,markese,alenter,benjix,superdigi,fra_bo, Lord_Crassus,Andr3a83,mcfour,yeoshuha,lampuga,gargyu,emmedi,ranFart |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1380
|
Nessuno mi aiuta?
__________________
Ho trattato con djgusmy85,andreabiraghi,slimsh@dy,nicolojudo,ekidna,hidro,djeasy,johnf(postprova), stefanonweb(postprova),PuNkEtTaRo,emanuelito,obi_wan,markese,alenter,benjix,superdigi,fra_bo, Lord_Crassus,Andr3a83,mcfour,yeoshuha,lampuga,gargyu,emmedi,ranFart |
|
|
|
|
|
#4 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16214
|
Innanzitutto, sei su un forum e non in chat, quindi non avere fretta e lascia sempre passare almeno 24 ore prima di ripetere la richiesta di aiuto.
Poi: a naso, direi che c'è un problema di livello di visibilità. Tu ridefinisci a modo tuo l'operatore >>, ma lo fai nel corpo principale del programma, quindi l'overloading vale in tutto il programma. Ma l'operatore >> è già ridefinito all'interno della classe istream. Di conseguenza, alla riga in cui ti dà errore, il compilatore non sa se deve usare >> o istream::operator>>, ossia non è in grado di scegliere tra la definizione data da te e quella fornita dalla classe istream.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1380
|
Quote:
Si ma come risolvo? Voglio dire, se io ridefinisco un operatore, il compilatore non è costretto ad usare la mai definizione? Anche sui libri di testo riporta esempi come il mio programma...
__________________
Ho trattato con djgusmy85,andreabiraghi,slimsh@dy,nicolojudo,ekidna,hidro,djeasy,johnf(postprova), stefanonweb(postprova),PuNkEtTaRo,emanuelito,obi_wan,markese,alenter,benjix,superdigi,fra_bo, Lord_Crassus,Andr3a83,mcfour,yeoshuha,lampuga,gargyu,emmedi,ranFart |
|
|
|
|
|
|
#6 | ||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16214
|
Quote:
Dunque: sempre a naso, direi che dovresti definire una sottoclasse di std::istream in cui ridefinisci l'operatore >>, e creare un'istanza di tale classe in cui "copi" cin e della quale usi il >>. Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1380
|
Quote:
ma il discorso è... se devo andare a fare tuto sto parapiglia, a che serve l'operator overload? Voglio dire il guadagno sta appunto nell'attuare una ridefinizione in poche righe altrimenti tanto vale creare una funzione che faccia il suo dovere e amen! Grazie dell'aiuto
__________________
Ho trattato con djgusmy85,andreabiraghi,slimsh@dy,nicolojudo,ekidna,hidro,djeasy,johnf(postprova), stefanonweb(postprova),PuNkEtTaRo,emanuelito,obi_wan,markese,alenter,benjix,superdigi,fra_bo, Lord_Crassus,Andr3a83,mcfour,yeoshuha,lampuga,gargyu,emmedi,ranFart |
|
|
|
|
|
|
#8 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16214
|
Quote:
Ad esempio, l'operatore binario >> ha il significato di shift quando i suoi operandi sono interi, ossia quando il contesto è (int,int); ma ha il significato di lettura di un token che rappresenta un numero in virgola mobile quando il suo operando sinistro è un riferimento a un oggetto di tipo istream e il suo operando destro è un double, ossia quando il contesto è (istream&,double). Ora, tu hai definito un'altra volta >>, ma sempre in un contesto (istream&,double). Il risultato è che il compilatore non sa quale usare. La soluzione che ti avevo detto prima porta il contesto di >> in una cosa del tipo (subclass_of_istream&,double), che non dà problemi di interpretazione.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:37.



















