2010-03-12 5 views
0
char b; 

operator<<(cout,(operator>>(cin,b))); 

cela ne compile en vC++ parce que les 8 dévers convertir ce surcharge de type.intérieur opérateur ne fonctionne pas

peut-on expliquer .....

est leur problème avec un type de retour ...........

+1

S'il vous plaît ne pas ... mais je me sens comme il: 'char b; cout << ((cin >> b), b) ' –

+0

Notez que l'utilisation de' operator << (cout, b) 'n'est pas idiomatique. 'cout << b' est sémantiquement équivalent mais beaucoup plus facile à écrire et à lire. @ David: Oh mon dieu! –

Répondre

6

L'opération d'extraction de flux c.-à-op>> retourne un objet tapez istream&. Le op<< n'a pas de surcharge qui prend istream& comme deuxième paramètre. Vous devez diviser les deux actions ou définir une telle surcharge.

0
char b; 
operator<<(cout,(operator>>(cin,b),b)); 
+3

Spookily presque identique au code dans le commentaire de David Rodriguez, posté 18 minutes plus tôt. –

+0

Nice. Une autre interprétation du code d'OP: 'cout.operator <<(operator>> (cin, b))'. Cela afficherait l'adresse de cin, cependant (résultat de la conversion en 'void *'). – visitor

0

Le problème est que l'opérateur de sortie qui fonctionnerait prend void*, mais qui est membre. Si vous changez à ce qui suit, il convertira le istream& retourné par la operator>> à void* et la sortie (et il est un pointeur NULL si l'extraction a travaillé, et un pointeur non NULL non):

cout.operator<<(operator>>(cin,b)); 

Je ne suis pas sûr de savoir pourquoi vous faites cela. Pouvez-vous élaborer s'il vous plaît? Si vous voulez sortir tous les trucs de cin tout de suite, utilisez le tampon sous-jacente

cout << cin.rdbuf();