Newsgroup: it.comp.lang.c++
Titolo: Errore, ma non capisco il perchè!

Questo è il codice:
#include<iostream>
using namespace std;
class Mia {
friend ostream &operator<<( ostream &, const Mia &);
public:
 Mia( int = 0, int = 0 );
 ~Mia() { cout << "Sono il distruttore di mia!\n";};
private:
 int a,b;
};
Mia::Mia ( int va, int vb ) {
 cout << "Oggetto costruito!\n";
 a = va;
 b = vb;
};
ostream &operator<<( ostream &output , const Mia &x ) {
 output << x.a;
 output << x.b;
};
int main() {
 Mia prova;
 cout << prova;
 return 0;
}
Gli errori sono 3:
1) Non si può accedere ad a attraverso la funzione operator<<!
2) Stesso errore di prima per b!
3) In cout << prova  l'operatore << è ambigluo!
Non so come andare avanti vi prego aiutatemi!
Ciao
Francesco

 Questo è il codice:
[.... cut ....]
L'unico errore che rilevo io è la mancanza del valore di ritorno in
operator<<(), dovresti restituire lo stream output per consentire il
concatenamento dell'operatore.
Marco

 };
non ritorna lo stream, (visto che hai dichiarato, giustamente, ostream
&operator)
ostream &operator<<( ostream &output , const Mia &x ) {
    return output << x.a << " " << x.b << endl;
}
--
Ciao.
Maurizio
P.S.: eliminare _NO_SPAM per rispodere in privato

 }
a parte l'errore del return, il tuo codice con g++ funziona
bye

Seguendo le indicazioni che mi avete dato ho fatto le modifiche al codice!
#include<iostream>
using namespace std;
class Mia {
friend ostream &operator<<( ostream &, const Mia &);
public:
 Mia( int = 0, int = 0 );
 ~Mia() { cout << "Sono il distruttore di mia!\n";};
private:
 int a,b;
};
Mia::Mia ( int va, int vb ) {
 cout << "Oggetto costruito!\n";
 a = va;
 b = vb;
}
ostream &operator<<( ostream &output , const Mia &x ) {
 output << x.a;
 output << x.b;
 return output;
}
int main() {
 Mia prova;
 cout << prova;
 return 0;
}
Io uso il VC++ 6.0 e continua a darmi i medesimi errori!
Cosa devo fare?
Grazie mille per qualsiasi risposta(sto impazzendo)!
Ciao
Francesco

penso che l'errore sia per il fatto che uso un metodo operator<< , visto che
se creo una funzione friend dandogli un nome diverso riesce a leggere i dati
private!
Ma non capisco comunue perchè mi crei dei problemi con operator<<!
Aiuto!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 Cosa devo fare?
Non so che dirti, compilando con VC++ 7 funziona (una volta aggiunto il
return come ti ho detto). Controlla le impostazioni del tuo progetto, magari
comincia un progetto da zero, non si sa mai...
Marco

 // ...
Il codice in questione sembra conforme (il Comeau Test Drive lo compila
senza errori né warning; v. 
www.comeaucomputing.com/tryitout/
).
Sono propenso a supporre si tratti di un difetto del compilatore;
supposizione che mi pare trovi conferma in questo thread, che ho trovato
cercando un pochino con Google:
 
http://groups.google.com/groups?th=49532460b35654f7
Max

 ha scritto nel messaggio
news:Pine.LNX.4.10.102072...@c64.comm2000.it...

Grazie mille Max, ho letto il thread ed ho risolto!
Ciao
Francesco

 in questo modo:
non cambia nulla: le friend-declarations hanno lo stesso effetto in 
qualsiasi sezione della classe si trovano: quindi dichiararla "pubblica" 
e` equivalente a dichiararla "privata" 
ciao Anto
-- 
Antonio Cuni, 20 anni, studente
Brainbench C++ Master: 4.73, higher than 99% of all previous test takers.
C Language: 3.79, higher than 92% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it