问题描述
|
我是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&)
我该如何正确处理?
解决方法
你可能要做
a->foo(*b);
因为foo引用b而不是b的指针。
C ++中的指针变量和引用变量之间有什么区别?是学习C ++中的指针和引用之间区别的好地方
, 您正在调用一个函数,该函数期望使用指向该对象的指针(该对象是不兼容的类型)进行引用。要编译代码,您需要这样调用foo:
a->foo(*b);
本质上,您是在取消引用指针以获取实际对象并将该对象传递给foo
。编译器负责将引用传递给对象,而不是对象本身。