La pregunta es en referencia a this, que fue publicado poco tiempo antes.
Mientras que el OP estaba feliz de aceptar la respuesta que resolvió su problema, estaba un poco intrigado con un detalle de por qué el compilador dio un error aparentemente incorrecto.¿Por qué el compilador no detecta la firma de la función correcta por error?
A continuación se muestra un pequeño ejemplo de código que he creado para demostrar la misma:
class YourClass
{
};
class YourClass2
{
};
class MyClass
{
public:
void doSomething(YourClass2 obj)
{
//Nothing more Interesting to do
}
};
int main()
{
YourClass *ptr = new YourClass();
MyClass obj;
obj.doSomething(ptr);
return 0;
}
Compilación this con GCC (4.3.4) da un resultado de error aparentemente extraña:
prog.cpp: In function ‘int main()’:
prog.cpp:23: error: no matching function for call to ‘MyClass::doSomething(YourClass*&)’
prog.cpp:13: note: candidates are: void MyClass::doSomething(YourClass2)
Entonces la pregunta es:
¿Por qué tratar el compilador de la llamada,
obj.doSomething(ptr);
como llamada a una función con el prototipo,
MyClass::doSomething(YourClass*&)
y no
MyClass::doSomething(YourClass*)
que parece ser el caso obvio.
+1. Me gustó el análisis paso a paso del mensaje del compilador. :-). Y el punto más importante es 'El problema es que estás tratando de interpretar eso como una firma de función, pero es más bien la descripción de la llamada de función. – Nawaz