viceversa temperatura tabla para kelvin grados farenheit convertir conversion como centígrados centigrados celsius c++

temperatura - acerca de la conversión de C++: conversión desconocida para el argumento 1 de ''[some_class]'' a ''[some_class] &''



tabla de conversion de temperatura (2)

En el primer caso, intenta pasar una referencia (no constante) a un argumento temporal como una función que no es posible. En el segundo caso, pasa una referencia a un objeto existente que es perfectamente válido.

Estoy trabajando en C ++, y tuve un error que no sabía la razón exacta. Encontré la solución, pero todavía quiero saber por qué.

class Base { public: void something(Base& b){} }; int main() { Base b; b.something(Base()); return 0; }

cuando compilo el código, recibí este siguiente error:

abc.cpp:12:20: error: no matching function for call to ‘Base::something(Base)’ abc.cpp:12:20: note: candidate is: abc.cpp:6:7: note: void Base::something(Base&) abc.cpp:6:7: note: no known conversion for argument 1 from ‘Base’ to ‘Base&’

pero cuando reemplacé b.something (Base ()) en

Base c; b.something(c);

el error se fue, me pregunto ¿por qué? ¿no tienen el mismo tipo? ¿Solo importa cómo lo escribo, pero el significado debería ser el mismo?

¡Gracias chicos!


Está pasando un objeto Base temporal aquí:

b.something(Base());

pero intenta vincular eso a una referencia lvalue no const aquí:

void something(Base& b){}

Esto no está permitido en C ++ estándar. Necesitas una referencia const .

void something(const Base& b){}

Cuando haces esto:

Base c; b.something(c);

no estás pasando un temporal. La referencia no const se une a c .