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