Я знаю, что Вопрос в том, что компилятору не требуется никаких особых усилий для обнаружения сигнатуры этой функции, и, тем не менее, он выдает диагностическое сообщение, которое не соответствует. Вопрос Почему?

с касаетсяэто, который был размещен немного раньше.
Хотя ОП был рад принять ответ, который решил его проблему, я был немного заинтригован деталями о том, почему компилятор выдал на первый взгляд ошибочную ошибку.

Ниже приведен небольшой пример кода, который я создал, чтобы продемонстрировать то же самое:

    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;
    }

составлениеэто с участиемGCC (4.3.4) выдает на первый взгляд странную ошибку:

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)

Итак, вопрос таков:
Почему компилятор обрабатывает вызов,

obj.doSomething(ptr);

как вызов функции с прототипом,

MyClass::doSomething(YourClass*&)

и нет

MyClass::doSomething(YourClass*)

что кажется очевидным случаем.

Ответы на вопрос(4)

Ваш ответ на вопрос