|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Overloading Operatori
friend ostream &operator << (ostream &out, Person &Record);
friend istream &operator >> (istream &in, Person &Record); friend inline int operator << (const Person &oper1, const Person &Record); Ho ridefinito gli opeatori qui sopra, però quando tento di usare il terzo (all'interno di un test) mi viene dato un errore da parte del compilatore. Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quale errore ?
Sicuro che possa essere const il parametro di sinistra dello schift logico ? Solitamente non lo è...sarà per questo ? |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
se conpilo senza fare uso di questo operatore logico non viene dato alcun errore, ma se invece magari inserisco:
if (var1 << var2 ) cout << "Ciao" << endl; mi viene dato un errore. Booo |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, ma quale errore ?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
main.cpp: In function `int main ()':
main.cpp:128: invalid operands of types `Person *' and `Person *' to binary `operator<<' make: [main] Error 1 (ignored) Ecco l'errore che mi da' il compilatore. Non saprei..... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
var1 e var2 sono dichiarate così ?
Person var1, var2; Sembra che le veda come puntatori.... |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Le variabili le ho dichiare dinamicamente:
Person *var1 = new Person; Person *var2 = new Person; Potrebbe essere questo l'errore??? Per caso dovrei fare: if (*var1 >> *var2) cout <<"..." ; Grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Ho provato a fare come ho scritto sopra, ma niente.
Bo, se sai come mai non funziona te ne sarei grato.
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
A me funziona...ho fatto qualche prova...
#include <iostream.h> class Person { int num; public: Person():num(1){}; friend int operator<< (const Person &p1, const Person &p2); }; inline int operator<< (const Person &p1, const Person &p2) { return p1.num+p2.num; } void main() { Person var1, var2, *var3, *var4; var3 = new Person; var4 = new Person; int i = var1 << var2; cout << i; i = *var3 << *var4; cout << i; delete var3; delete var4; } |
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Il problema sta nel fatto che la funzione si aspetta due oggetti di quel tipo ( da passare come reference ) , mentre tu passi solo il puntatore . Devi invece dereferenziarlo prima.
Quello che hai scritto tu va quasi bene, Quasi perche' il compilatore probabilmente prima cerca di fare lo shift e poi usare l'operatore << ( almeno penso ). Con if ( (*var1) << (*var2) ) cout << "Ciao" << endl; Dovrebbe funzionare tutto =) |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Ho provato a fare quello che mi avete consigliato, ma non funziona. Non è che mi può dare problemi problemi questa funzione ????
friend ostream &operator << (ostream &out, Person &Record); Ho provato da solo il codice di cioci e tutto funzionava. Ciao Grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Boh...a me funzionano anche gli altri operatori...
#include <iostream.h> class Person { int num; public: Person():num(1){}; friend int operator << (const Person &p1, const Person &p2); friend ostream &operator << (ostream &out, Person &Record); friend istream &operator >> (istream &in, Person &Record); }; inline int operator<< (const Person &p1, const Person &p2) { return p1.num+p2.num; } ostream &operator << (ostream &out, Person &Record) { return (out << Record.num); } istream &operator >> (istream &in, Person &Record) { return (in >> Record.num); } void main() { Person var1, var2, *var3, *var4; var3 = new Person; var4 = new Person; int i = var1 << var2; cout << i; i = *var3 << *var4; cout << i << endl; cin >> var1; cin >> *var3; cout << var1 << " " << *var3 << endl; delete var3; delete var4; } |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Grazie, adesso provo, ti faccio sapere.
Ancora grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Ho provato, ma ancora non mi funziona.
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non so che dirti...in teoria non importa quale sia il "contenuto" della classe...la dichiarazione degli opertori che usato nell'esempio dovrebbe andare bene lo stesso. Quindi a questo punto il problema è altrove... Ma che errore ti da ? Sempre il solito ?
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Si si, sempre il solito errore.
Vabbe' provero' a controllare anche tutto il resto. Ciao Grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma la famosa riga 128 in cui viene generato l'errore com'è ?
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
La riga 128 è cosi' scritta:
i = *ciao1 << *ciao2 ; dove i è una variabile di tipo intero
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E ciao1 e ciao2 come sono dichiarate...l'errore esatto è sempre quello che hai scritto sopra ? Hai provato con le parentesi ?
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
|
Si si, le ho dichiarate e ho provato anche con le parentesi.
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5 Utenti con cui ho trattato |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:13.



















