quiero compilar la siguiente línea de código de http://code.google.com/p/enhsim:¿Cuándo no se puede convertir un objeto a una referencia?
enh::eout << enh::setw(26);
gcc da el siguiente error:
error: no match for 'operator<<' in 'enh::eout << enh::setw(26)'
Pero la clase EnhSimOutput
(de los cuales enh::eout
es un ejemplo) no declarar:
EnhSimOutput& operator<< (setw& p);
Este problema desaparece si implemento una versión de la operación que acepta t l objeto de valor:
EnhSimOutput& operator<< (setw p);
o si se crea el objeto enh::setw
como local, es decir:
enh::setw wValue(26);
enh::eout << wValue;
Mi pregunta es la siguiente: ¿por qué gcc no selecciona la versión "por referencia" de el operador para comenzar?
Los desarrolladores que escribieron este código claramente lo compilaron, pero el gcc predeterminado se rehúsa a hacerlo. ¿Por qué hay una diferencia entre un objeto declarado por separado como una variable local y un local creado en línea?
Cambiar el operador a una referencia constante soluciona el problema correctamente. Gracias por la información sobre valores. No tengo idea de por qué se compiló el código para otra persona. El proyecto está destinado a Windows ... tal vez todos estén usando un compilador * no suficiente * compilador. Ni idea. –
litb: Creo que te refieres a "reference-to-const" en tu oración "Además, si sigues eso, el parámetro no puede haber llamado a las funciones miembro non-const, porque es una referencia-a-nonconst. " –
Matt: las versiones anteriores de MS Visual C++ vincularían incorrectamente los temporales a ref-to-non-const. Creo que esto se corrigió en MSVC++ 2005. –