Я знаю, что Вопрос в том, что компилятору не требуется никаких особых усилий для обнаружения сигнатуры этой функции, и, тем не менее, он выдает диагностическое сообщение, которое не соответствует. Вопрос Почему?
с касаетсяэто, который был размещен немного раньше.
Хотя ОП был рад принять ответ, который решил его проблему, я был немного заинтригован деталями о том, почему компилятор выдал на первый взгляд ошибочную ошибку.
Ниже приведен небольшой пример кода, который я создал, чтобы продемонстрировать то же самое:
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*)
что кажется очевидным случаем.