Por que o compilador não detecta a assinatura correta da função com err
A pergunta está em referência aist, publicado um pouco ante
nquanto o OP estava feliz em aceitar a resposta que resolveu seu problema, fiquei um pouco intrigado com um detalhe sobre o motivo pelo qual o compilador deu um erro aparentemente errad
Abaixo é um pequeno exemplo de código que criei para demonstrar o mesmo:
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;
}
Compilingist comGCC (4.3.4) fornece um resultado de erro aparentemente estranho:
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)
Então a pergunta é:
Por que o compilador trata a chamada,
obj.doSomething(ptr);
como chamar uma função com protótipo,
MyClass::doSomething(YourClass*&)
e nã
MyClass::doSomething(YourClass*)
que parece ser o caso óbvio.