Путаница с указателем - PullRequest
0 голосов
/ 01 июня 2011

Я довольно новичок в C ++, и у меня ошибка, которую я просто не понимаю.

class1* a = (class1*)p1;
class2* b = (class2*)p2;
a->foo(b);

Ошибка:

error: no matching function for call to 'a::foo(b*&)'
note: candidates are: void a::foo(const b&)

Как мне это понять?

Ответы [ 2 ]

10 голосов
/ 01 июня 2011

Вам, вероятно, придется сделать

  a->foo(*b);

потому что foo принимает ссылку на b, а не указатель на b.

Каковы различия между указателем и ссылочной переменной в C ++? - хорошее место, чтобы узнать разницу между указателем и ссылкой в ​​C ++

4 голосов
/ 01 июня 2011

Вы вызываете функцию, которая ожидает ссылку на объект с указателем на указанный объект (который является несовместимым типом).Чтобы получить код для компиляции, вы должны вызвать foo следующим образом:

a->foo(*b);

По существу, вы разыменовываете указатель, чтобы получить реальный объект и передать его в foo.Компилятор позаботится о передаче ссылки на объект вместо самого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...