El 5/10/07, Diego Martín Nieto Cid <[EMAIL PROTECTED]> escribió:
> Tengo el siguiente siguiente código
>
>          1 #include <sstream>
>          2 #include <iostream>
>          3
>          4 using namespace std;
>          5
>          6 int main()
>          7 {
>          8     char c;
>          9
>         10     istringstream iss( "C D E" );
>         11     iss >> c;
>         12
>         13     istringstream( "C D E" ) >> c;
>         14
>         15     return 0;
>         16 }
>
> En la linea 13 me da el siguiente error de compilacion
>         test.cpp:13: error: ambiguous overload for 'operator>>'
>         ( el resto en: http://pastebin.ca/726891 )
>
> aunque la 13 parece equivalente a las linea 10 y 11.
>
> Habrá alguna forma de desambiguar sin complicar la linea?

Es raro que compile, y que te tire un error de ambigüedad, porque el
problema es que estás pasando como temporal un objeto que la función
(operator>>) toma como referencia. Eso en términos generales no tiene
sentido, porque si pasás algo como referencia (no const) es porque lo
querés modificar, y si pasás un objeto temporal, lo que modifiques
queda en la nada. En este caso en particular, parece tener _algo_ de
sentido, pero igual nunca es una buena idea pasar una referencia a un
temporal a nadie.

No es tan terrible dividirlo en dos líneas. Si no querés ensuciar el
scope de última ponelo entre llaves (o hacete una función inline si lo
vas a usar mucho).

PD: Si el error es algo corto, es mejor que lo mandes en el mail
entero (aunque sea abajo de todo para que no "ensucie" tanto el
mensaje), porque es medio molesto tener que ir a verlo a otro lado.

-- 
Leandro Lucarella @ GMail

_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a